@oo22maxi

Выполнение скрипта при выключении-перезагрузке, что не так?

Ubuntu 15.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 .

Появляется сообщение:
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults

В папках /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 и не работает.

Что не так? Почему не работает?

Спасибо.

UPD: Все выше написанное скорей всего подойдет для Ubuntu 14.10 и ниже (не проверял)
Дополнительно
От сюда
А как сделать, чтобы скрипт выполнялся при выключении машины? Директория /etc/rc6.d содержит скрипты, которые выполняются при перезагрузке машины. Директория /etc/rc0.d содержит скрипты, которые выполняются при выключении машины. Я закинул символическую ссылку в директорию /etc/rc0.d, так как мне нужно выполнение скрипта при выключении компа. Обозвал файл S00backup. И всего делов. Все выключается и бэкапится как надо.
  • Вопрос задан
  • 6785 просмотров
Решения вопроса 2
@oo22maxi Автор вопроса
Решение для Ubuntu 15.10 (думаю в 15.04 и выше работает тоже):
Так как Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd. тык


Не забываем менять 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 - тык.
Ответ написан
plin2s
@plin2s
IT, инженер
Наверное, это потому, что 15.10 использует systemd ;)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
1nn0
@1nn0
Системный администратор\Фрилансер
Попробуйте использовать полный путь до echo
Напиример:
/bin/echo
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы