Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Выполнение скрипта при выключении-перезагрузке, что не так?  (Прочитано 4209 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн oo22maxi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
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

Немного о файле
(Нажмите, чтобы показать/скрыть)

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. И всего делов. Все выключается и бэкапится как надо.

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

Спасибо.
« Последнее редактирование: 01 Февраль 2016, 23:06:02 от oo22maxi »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5664
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
sudo update-rc.d finish-yandex.sh start 01 0 1 6 .
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн oo22maxi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
sudo update-rc.d finish-yandex.sh start 01 0 1 6 .

Попробовал, но все равно скрипт не выполняется.

Онлайн Heider

  • Старожил
  • *
  • Сообщений: 1037
    • Просмотр профиля
Если я правильно перевел с английского, система пишет: "update-rc.d: Внимание: Запуск и установка действий больше не поддерживается."

Пользователь решил продолжить мысль [time]31 Январь 2016, 16:27:59[/time]:
В Ubuntu, по-моему так надо:
sudo service <имясервиса> startдля запуска

sudo update-rc.d <имясервиса> enableдля автозапуска

Пользователь решил продолжить мысль 31 Январь 2016, 15:33:44:
Сорри, в твоей версии нужны команды systemd
« Последнее редактирование: 31 Январь 2016, 15:33:44 от Heider »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5664
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Должно быть Start(по моему)update-rc.d --help?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Онлайн Heider

  • Старожил
  • *
  • Сообщений: 1037
    • Просмотр профиля
Azure,
Да не в этом дело, скорее всего. Это команда sysv, а здесь написано:
"Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd."
У ТС версия 15.10, там уже нет sysv.

Оффлайн oo22maxi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Azure я попробовал с большой буквы написать, вот что получил:
sudo update-rc.d finish-yandex.sh Start 01 0 1 6 .
usage: update-rc.d [-n] [-f] <basename> remove
       update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
-n: not really
-f: force

--Попробовал так:
sudo update-rc.d finish-yandex.sh enable Start 01 0 1 6 .
update-rc.d: warning: enable action will have no effect on runlevel Start
update-rc.d: warning: enable action will have no effect on runlevel 01
update-rc.d: warning: enable action will have no effect on runlevel 0
update-rc.d: warning: enable action will have no effect on runlevel 1
update-rc.d: warning: enable action will have no effect on runlevel 6
update-rc.d: warning: enable action will have no effect on runlevel .
update-rc.d: error: no runlevel symlinks to modify, aborting!

--и так:
sudo update-rc.d finish-yandex.sh enable 01 0 1 6 .
update-rc.d: warning: enable action will have no effect on runlevel Start
update-rc.d: warning: enable action will have no effect on runlevel 01
update-rc.d: warning: enable action will have no effect on runlevel 0
update-rc.d: warning: enable action will have no effect on runlevel 1
update-rc.d: warning: enable action will have no effect on runlevel 6
update-rc.d: warning: enable action will have no effect on runlevel .
update-rc.d: error: no runlevel symlinks to modify, aborting!

Мне кажется Heider прав... спасибо за наводку. Ушел читать...
ps: Примеру буду рад =)

Оффлайн oo22maxi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Благодарю всех за помощь! Решение оказалось проще чем думал ;) Поправил пост, скрольте вверх...

 

Страница сгенерирована за 0.059 секунд. Запросов: 24.