Ubuntu 15.10
UPD: Решение для Ubuntu 15.10 (думаю в 15.04 и выше работает тоже):Так как Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd. (правильно подметил Heider)
Не забываем менять user на свойСоздадим новый файл, я назвал его finish-yandex, с таким содержанием:
[Unit]
Description=Save Yandex config
After=systemd-user-sessions.service
[Service]
ExecStop=/bin/bash '/home/user/.yandex_ram/finish-yandex.sh'
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target reboot.target poweroff.target
Немного о файле
Unit - общая информация.
Description - описание сервиса.
After - задаёт порядок загрузки. В моём случае после старта сессии пользователя.
Service - содержит информацию о службе
ExecStop - Выполняет команду при остановке сервиса.
Type - Типы службы. oneshot полезен для скриптов, которые выполняют одно задание и завершаются
Install - когда юнит должен быть активирован
finish-yandex.sh для теста содержит:
#!/bin/sh
echo "it works test" >> /home/user/.yandex_ram/test.log
Делаем файл finish-yandex исполняемым:
sudo chmod +x /home/user/.yandex_ram/finish-yandex
Копируем файл в /etc/systemd/system с расширением *.service:
sudo cp /home/user/.yandex_ram/finish-yandex /etc/systemd/system/finish-yandex.service
Перезагружаем systemd для поиска новых или измененных юнитов:
sudo systemctl daemon-reload
Включаем юнит в автозапуск при загрузке системы:
sudo systemctl enable finish-yandex.service
Перезагружаемся и проверяем. У меня все заработало, файл test.log появился после перезагрузки.
Что бы проверить для начало без перезагрузки, можно запустить и остановить юнит:
sudo systemctl start finish-yandex.service
sudo systemctl stop finish-yandex.service
Для отключения юнита из автозапуск при загрузке системы:
sudo systemctl disable finish-yandex.service
Полезная ссылка о systemd -
тык.
Это скорей всего подойдет для Ubuntu 14.10 и ниже (не проверял):Почему-то не выполняется скрипт при рестарте или выключении. Собственно весь процесс
Для теста написал такой скрипт
finish-yandex.sh:
#!/bin/sh
### BEGIN INIT INFO
# Provides: finish-yandex
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: Save yandex config.
# Description:
### END INIT INFO
echo "it works test" >> /home/user/.yandex_ram/test.log
Добавляю файл finish-yandex.sh в папку /etc/init.d/ и делаю исполняемым
sudo chmod +x /etc/init.d/finish-yandex.sh
Далее выполняю команду
sudo update-rc.d finish-yandex.sh stop 01 0 1 6 .
UPD: Если появится сообщение на подобии:
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Перевел Heider: update-rc.d: Внимание: Запуск и установка действий больше не поддерживается.
тогда попробуйте решение для Ubuntu 15.10 (
которое чуть выше).
В папках /etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/ появляются симлинки K01finish-yandex.sh
После делаю перезагрузку и пупырь, test.log в папке нет... По идеи уже должно работать.
Пробовал в ручную делать симлинки в /etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/ с названием K00finish-yandex.sh или S00finish-yandex.sh и не работает.Если не заработало, попробуйте создать в ручную симлинки в папках /etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/ с названиями K00* или S00* на файл находящийся в папке /etc/init.d/.
От
сюдаА как сделать, чтобы скрипт выполнялся при выключении машины? Директория /etc/rc6.d содержит скрипты, которые выполняются при перезагрузке машины. Директория /etc/rc0.d содержит скрипты, которые выполняются при выключении машины. Я закинул символическую ссылку в директорию /etc/rc0.d, так как мне нужно выполнение скрипта при выключении компа. Обозвал файл S00backup. И всего делов. Все выключается и бэкапится как надо.
Что не так? Почему не работает?Спасибо.