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

O2
На сайте с 10.10.2011
Offline
36
5102

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 и не работает.

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

Спасибо.

baas
На сайте с 17.09.2012
Offline
162
#1
oo22rus:
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 и не работает.

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

Спасибо.

А не проще добавить в крон?

@reboot /etc/init.d/finish-yandex.sh

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
Оптимизайка
На сайте с 11.03.2012
Offline
396
#2

Добавьте в /etc/rc.local. В современных системах и другие системы инициализации могут быть :)

P.S. Сорри, вам при выключении надо, не подходит.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
S2
На сайте с 30.12.2015
Offline
307
#3

BugReport:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718232

This is not a bug. That is an informational statement made by the
/usr/sbin/update-rc.d program of the sys-rc package which is used by
Debian packages to install startup symlinks.

А по теме вот тут все подробно http://tuksik.ru/auto-start-and-shutdown/

O2
На сайте с 10.10.2011
Offline
36
#4
baas:
А не проще добавить в крон?
@reboot /etc/init.d/finish-yandex.sh

Не знал.

Можно уточню, то есть если я нажму перезагрузку, то он сначала выполнит скрип, а потом уже перезагрузиться?

ps: Это не сервер..

Оптимизайка:
Добавьте в /etc/rc.local. В современных системах и другие системы инициализации могут быть :)

P.S. Сорри, вам при выключении надо, не подходит.

и при перезагрузке =)

---------- Добавлено 31.01.2016 в 18:36 ----------

smart2web:
BugReport:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718232
А по теме вот тут все подробно http://tuksik.ru/auto-start-and-shutdown/

Я уже тут был http://tuksik.ru/auto-start-and-shutdown/, сделал примерно то же самое. Но мне тут подсказали, что

"Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd." тык.

---------- Добавлено 31.01.2016 в 18:58 ----------

baas, В документации cron пишут что

@reboot Запуск при загрузке

То есть мне это не подходит получается...

P
На сайте с 08.03.2007
Offline
250
#5

Можно прочитать кусочки из http://www2.kangran.su/~nnz/pub/s4a/s4a_latest.pdf и сделать по правилам systemd (если он используется).

С
На сайте с 14.04.2011
Offline
63
#6
oo22rus:
test.log в папке нет...Спасибо.

А руками не пробовали запустить?

Перенаправление >> не создаёт файл, лишь дописывает в существующий.

O2
На сайте с 10.10.2011
Offline
36
#7
Сентябрь:
А руками не пробовали запустить?
Перенаправление >> не создаёт файл, лишь дописывает в существующий.

Проблема не в этом, скрипт из консоли отрабатывает, если нет файла то он его создает.

Мне нужно что бы скрипт выполнялся при выключении или перезагрузке.

ps: Почти сделал...

С
На сайте с 14.04.2011
Offline
63
#8

А всё понял. Дело не в этом.

O2
На сайте с 10.10.2011
Offline
36
#9

Решение для 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

Немного о файле

[spoiler]Unit - общая информация.

Description - описание сервиса.

After - задаёт порядок загрузки. В моём случае после старта сессии пользователя.

Service - содержит информацию о службе

ExecStop - Выполняет команду при остановке сервиса.

Type - Типы службы. oneshot полезен для скриптов, которые выполняют одно задание и завершаются

Install - когда юнит должен быть активирован[/spoiler]

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 и ниже

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий