- Запуск скрипта при выключении компьютера
- Выполнить скрипт при выходе / перезагрузке / выключении в Ubuntu
- 2 ответа
- Чтобы выполнить скрипт при выходе из системы:
- Чтобы выполнить скрипт после перезагрузки:
- Чтобы выполнить скрипт при выключении:
- Как это сделать с помощью systemd
- Версия GUI
- CLI (командная строка) версия
- Изменение условий запуска для выключения
- Запуск скрипта при выключении компьютера
- Выполнение скрипта при запуске или выключении linux
- Консольный вариант.
- Графический вариант.
Запуск скрипта при выключении компьютера
Кто ни будь подскажет, как правильно останавливать сервис при выключении хоста?
Дистрибутив Mandriva
Создал скрипт, который пониает start и stop.
Положил в /etc/init.d
Добавил ссылки S80vmstart в /etc/rc5.d
Все стартует нормально
Ссылки для остановки K80vmstat в /etc/rc0.d /etc/rc1.d /etc/rc6.d
Но скрипт для остановки даже не вызывается!
Почему?
можно создать rc.local_shutdown там, где лежит rc.local. вроде как должен выполняться.
А ваш скрипт отмечат себя в /var/run/subsys или где там в мандриве это делается?
Нет, не отмечает? Это так принципиально? Там же вроде pid процесса записывается, но мне это не особо нужно для останови.
Попробовал
создал в /etc/rc.d скрипт rc.local_shutdow
Владелец root, права -rwxr-xr-x
Странно все это.
Сделал все как для скрипта sshd только при остановке sshd выполняется, а мой нет!
Может его надо еще где ни будь прописать?
в слаке запускается. мандрива отстой.
Одинаковые!
-rwxr-xr-x 1 root root 3591 2010-07-11 15:10 sshd*
-rwxr-xr-x 1 root root 1155 2010-07-11 15:38 vmstart*
Может его не 80 останавливать а раньше? Если в него вписать echo hello > /tmp/very.special.tmp.file.log то оно там появится?
Пробовал.
Тоже самое.
если строчку для протоколирования вставляешь, то из sshd она в файл вставляется, а из моего vmstart нет
🙁
Мистика. Или глюки мандривы. Типа сузёвого яста, когда сам что хочешь делаешь а системе пофиг, она по ясту живёт.
>> Нет, не отмечает? Это так принципиально? Там же вроде pid процесса записывается, но мне это не особо нужно для останови.
Это принципиально. И пиды пишутся в /var/run, а в subsys создаются пустые файлы.
(сам мандривой не пользовался)
Есть же команда update-rc.d специально для установки и удаления ссылок сценариев инициализации. Или в Mandriva всё так плохо, что нужно создавать свои велосипеды?
Здесь можно найти простой пример использования.
Ну что же. Проблема решена! И дело даже не в том, как установлен скрипт ( в mandriva есть chkconfig)
действительно надо создавать пустой файл в /var/lock/subsys файл должен называться так же как скрипт.
для меня проблема решилась добавкой строчкой touch /var/lock/subsy/vmstart
она должна выполняться когда сервис стартует mandriva сама удаляет его, когда сервис останавливается
Спасибо. Сейчас посмотрел, в debian она тоже есть, но не является основной.
In Debian, there are several tools with similar functionality, but users coming from other Linux distributions will find the tools in this package more familiar.
А теперь объясню, зачем эти файл в /var/run/subsys нужны: представьте себе, что вы отводите систему с runlevel 5 на runlevel 3. Необходимо остановить только те сервисы, которые активны в R5 но не активны в R3, и стартовать только те, которые активны в R3 и не активны в R5.
Если у нас есть /var/run/subsys, то мы смотрим туда, получаем имена запущеных сервисов, для каждого проверяем нужен ли он в новом runlevel и если не нужен, то останавливаем. Потом пробегаем по списку тех, кто нужен в новом runlevel, и если они не отмечены в /var/run/subsys, то стартуем их.
А как это обойти без /var/run/subsys? Только введя его аналог 🙂
Источник
Выполнить скрипт при выходе / перезагрузке / выключении в Ubuntu
Я хотел бы запустить .sh файл, используя bash при выходе из системы и выключении Ubuntu. Я искал в Интернете и нашел только исправления для KDE и GNOME. Сценарий прост, мне просто нужно знать, могу ли я добавить строку кода в файл «logoff/shutdown» или мне нужно сослаться на нее в другом сценарии.
2 ответа
Чтобы выполнить скрипт при выходе из системы:
Добавьте следующую строку:
в /etc/lightdm/lightdm.conf файл.
Вы должны перезапустить lightdm, чтобы это изменение вступило в силу. Для этого перейдите в tty1 с помощью Ctrl + Alt + F1 , войдите под своим именем пользователя и паролем и выполните следующую команду:
Примечание: используйте Ctrl + Alt + F7, чтобы перейти к графическому сеансу
Чтобы выполнить скрипт после перезагрузки:
- Поместите свой сценарий в /etc/rc0.d
- Сделайте его исполняемым: sudo chmod +x K99_script
- Заметки:
- Сценарии в этом каталоге выполняются в алфавитном порядке.
- Название вашего скрипта должно начинаться с K99 бежать в нужное время.
Чтобы выполнить скрипт при выключении:
- Поместите свой сценарий в /etc/rc6.d
- Сделайте его исполняемым: sudo chmod +x K99_script
- Заметки:
- Сценарии в этом каталоге выполняются в алфавитном порядке.
- Название вашего скрипта должно начинаться с K99 бежать в нужное время.
Как это сделать с помощью systemd
Если вы найдете эту ветку после июня 2016 года, Ubuntu и его производные, включая Mint, будут использовать systemd для управления инициализацией и завершением работы системы. У меня были проблемы со старым подходом, поэтому я исследовал системный подход.
С помощью systemd вы создаете один или два файла для вызова ваших сценариев, используя приведенные ниже шаблоны, и выполняете команду. Просто.
Версия GUI
Сначала создайте сценарии, которые вы хотите запустить при запуске и / или завершении работы. Я создал.scopening_atstart и.scfullcopy_atend.
Затем убедитесь, что они оба исполняемые, щелкнув правой кнопкой мыши по файлу, выбрав свойства и убедившись, что в соответствии с разрешениями вы отметили Разрешить выполнение файла как программы.
Два файла, которые я создал, заполняют и сохраняют содержимое виртуального диска. Они также создают файл в моем домашнем каталоге, чтобы доказать, что служба работает. Они были в форме:
Затем я открыл свой файловый менеджер как root, открыл /etc/systemd/system и создал файл startup.service и файл save-ramdisk.service. Очевидно, что вы можете выбрать свои собственные имена, и общие имена могли включать файл запуска с именем johns_start.service и файл завершения работы с именем johns_shutdown.service. Просто не выбирайте названия существующих сервисов.
Вы можете использовать те же служебные файлы, заменяя мой полный путь к исполняемому скрипту.
Наконец, для каждого из них выполните команду systemctl enable your_files_name (но без службы суффиксов). Так что мой первый был systemctl enable startup
Перезагрузите компьютер один раз, чтобы запустить службы. Служба запуска будет выполняться всякий раз, когда systemd входит в многопользовательскую цель, и службу остановки, когда она выходит из многопользовательской цели. Альтернативные сервисные файлы с различными условиями активации будут описаны ниже.
CLI (командная строка) версия
В этом описании предполагается, что вы работаете из своего домашнего каталога, а не /home/john, используете sudo по мере необходимости и ваш выбор редактора, где я пишу vim или svim.
Создание сценариев оболочки при запуске и завершении работы с первой строкой #!/bin/sh и сделать их исполняемыми, используя chmod +x my_new_filename ,
Создайте два файла, как указано выше, или в этом примере один файл для обработки задач запуска и завершения работы. Я буду выполнять скрипты в своем домашнем каталоге, но @don_crissti показал некоторые альтернативы в Stack Exchange.
и скопируйте в файл содержимое:
Затем включите службу с помощью команды:
и перезагрузите систему, после чего службы будут активны. Команды systemctl is-enabled start_and_stop а также systemctl is-active start_and_stop может быть использован для мониторинга ваших новых услуг.
Изменение условий запуска для выключения
Прежде всего файлы используют открытие или закрытие многопользовательской среды для запуска сценариев. Файл ниже использует начало четырех возможных процессов выключения для запуска своих сценариев. Добавление или удаление целей в строке «До» + в строке «WantedBy» позволит вам сделать более четкие различия:
Этот файл был предложен @Matthias в Unix & Linux ответом, но я не смог его запустить, пока не добавил раздел «Установка».
Снова отредактируйте скрипт в /etc/systemd/service/ и включите его, используя systemctl enable your_file_name , Когда я изменил цели, я использовал systemclt disable file_name команда, а затем снова включил его, который символически связал его с целевыми каталогами. Перезагрузитесь и сервис будет работать.
Источник
Запуск скрипта при выключении компьютера
Задача: Сделать автоматический запуск нашего скрипта перед перезагрузкой и выключением компьютера.
Для примера создадим скрипт выполняющий обновление системы перед выключением.
Для управления загрузкой и работой сервисов в kubuntu начиная с версии 15.04 используется systemd.
Systemd хранит свои юниты в папке /etc/systemd/system/ туда мы и положим свой новый юнит.
Создаем файл сервиса с именем poweroff_dist_upgrade.service
sudo nano /etc/systemd/system/poweroff_dist_upgrade.service
добавляем в него содержимое
[Unit]
Description=Dist Upgrade before restart and power off
After=systemd-user-sessions.service
[Install]
WantedBy=multi-user.target reboot.target poweroff.target
Unit — общая информация.
Description — описание сервиса.
After — задаёт порядок загрузки. В этом случае после старта сессии пользователя.
Service — содержит информацию о службе
ExecStop — Какой скрипт будет выполнен
Type — Типы службы. oneshot для скриптов, которые выполняют одно задание и завершаются
Install — когда юнит должен быть активирован.
multi-user.target или runlevel3.target соответствует runlevel=3 «Многопользовательский режим без графики»
Назначаем права на запуск
sudo chmod +x /etc/systemd/system/poweroff_dist_upgrade.service
Создаем сам скрипт который будет выполняться
sudo nano /usr/local/bin/distupgrade.sh
#!/bin/bash
apt update && apt dist-upgrade -f -y && apt autoremove -y
echo ‘Обновление ‘$(date ‘+%m.%d %H:%M’) >> /var/log/dist-upgrade_before_power_off.log
exit 0
Делаем скрипты выполняемым
sudo chmod +x /usr/local/bin/distupgrade.sh
Перезагружаем systemd для поиска новых или измененных юнитов:
sudo systemctl daemon-reload
Источник
Выполнение скрипта при запуске или выключении linux
Если на вопрос: «как добавить программу в автозагрузку?» — начинающие пользователи находят ответ достаточно быстро, то вопрос о запуске скрипта, при выключении/перезагрузки, ставит их в тупик. В статье будет описан стандартный способ для автоматического выполнения команд при включении и выключении linux, а также более простой способ для пользователей, у которых установлен gdm и графический интерфейс, например ubuntu.
Консольный вариант.
Немного теории.
Следует знать, что в Linux существует 7 уровней запуска. Однако, использоваться могут только 6.
Как у всех уважающих себя программ отсчёт начинается с 0-ля.
0 — Остановка или выключение системы.
1 — Однопользовательский режим.
2 — Многопользовательский режим, но без поддержки сети.
3 — Тоже самое, но с сетью.
4 — Добавили для красоты Не используется.
5 — Графический режим с загрузкой X сервера.
6 — Перезагрузка.
Если перейти в папку /etc (В некоторых дистрибутивах /etc/rc.d) то можно увидеть папки с 7-мью уровнями запуска.
Например при выключении компьютера, выполнятся все скрипты из папки rc0.d
Тут следует остановится по подробнее. Дело в том, что самих скриптов (а точнее сценариев) в этой папке нету, а есть только ссылки на файлы, которые лежат в папке /etc/init.d. Эти сценарии выполняют различные задачи, в зависимости от параметра start или stop (например /etc/init.d/reboot start и /etc/init.d/reboot stop это разные команды, а /etc/init.d/reboot вообще не будет работать). Если в ссылке стоит первая буква S, то значит сценарию подаётся параметр start, а если стоит буква K(от слова kill), то параметр stop. Цифра после буквы обозначает порядок выполнения сценария.
Например, на выше вставленном скриншоте вначале выполниться команда /etc/init.d/hddtemp stop, а уже позже /etc/init.d/networking start.
Хватит теории. Переходим к практике.
Для того, чтобы добавить команду в автозагрузку, достаточно поместить её в файл /etc/rc.local.
В этой части статьи в качестве редактора будет использоваться nano, но вы можете пользоваться своим любимым редактором, например gedit.
И помещаем наши команды чуть выше строчки с exit 0.
Для того, что бы команды выполнялись перед выключением или перезагрузкой нам нужно создать сценарий в папке /etc/init.d
Вставляем следующий код:
Если будет подаваться только один сигнал, то просто закомментируйте строку поставив в начале команды знак #
Например
Теперь делаем файл исполняемым:
Создать ссылки можно вручную, но проще это сделать через команду update-rc.d
Например:
Точки важны (обе). Исследуя просторы интернета, у меня сложилось впечатление, что синтаксис этой программы иногда меняется. Актуальные примеры можно посмотреть по команде «man update-rc.d». Примеры будут в низу.
Эта команда создаст по 2 ссылки в каталогах /etc/rc0.d (второе число в команде) и /etc/rc6.d (третье число в команде). Причём вначале будет выполняться сценарий с параметром stop (т.к. стоит 1), а уже потом с параметром start (т.к. стоит 20).
Если второй параметр не нужен, то можно выполнить команду:
Советую ставить приоритет повыше (т.е. число после start или stop должно быть маленьким), желательно меньше 20. В обратном случае у меня иногда зависал компьютер при попытке перезагрузиться.
Для пользователей ubuntu, да и многих других современных дистрибутивов с gdm можно воспользоваться…
Графический вариант.
Что касается автозагрузки то можно воспользоваться способом описанным здесь.
Или просто открыть «автоматически запускаемые приложения» командой:
Для выполнения скрипта при выключении компьютера, помещаем его в файл /etc/gdm/PostSession/Default
Источник