Как запустить скрипт при выходе из системы/перезагрузке/выключении в Ubuntu

Убунту 17

В этом руководстве мы познакомим вас с процессом запуска скрипта при выходе из системы, перезагрузке или завершении работы в Ubuntu. Это может быть особенно полезно для системных администраторов, которым необходимо выполнять определенные задачи на этих мероприятиях.

Да, при выходе из системы, перезагрузке или завершении работы в Ubuntu можно запустить скрипт с помощью systemd. Этого можно добиться, создав службу systemd, указывающую сценарий для запуска, и включив службу.

Понимание систем инициализации Ubuntu

Ubuntu, как и другие дистрибутивы Linux, использует систему инициализации для управления службами и задачами во время запуска и завершения работы. Система инициализации также обрабатывает такие задачи, как выход из сеанса пользователя. Ubuntu перешла от традиционной системы SysVinit к Upstart, а затем к systemd. В этом руководстве основное внимание будет уделено systemd, которая является системой инициализации по умолчанию в версиях Ubuntu, выпущенных после июня 2016 года.

Создание скрипта

Прежде чем мы продолжим, вам нужен сценарий, который вы хотите запускать при выходе из системы, перезагрузке или завершении работы. Для целей этого руководства мы создадим простой скрипт, который регистрирует дату и время события. Назовем этот скрипт myscript.sh.

#!/bin/bash echo “Событие произошло в $(дата)” >> /path/to/logfile

Команда date получает текущую дату и время, которые затем добавляются в файл журнала. Замените /path/to/logfile на путь к реальному файлу журнала в вашей системе.

Делаем скрипт исполняемым

Чтобы запустить скрипт, он должен быть исполняемым. Вы можете сделать это с помощью команды chmod:

chmod +x myscript.sh

Параметр +x делает скрипт исполняемым.

Создание службы Systemd

Чтобы запустить скрипт при выходе из системы, перезагрузке или завершении работы, мы создадим службу systemd. Откройте терминал и создайте новый служебный файл:

судо нано /etc/systemd/system/myscript.service

В этот файл добавьте следующее содержимое:

[Unit]

Description=Запускать myscript при выходе из системы, перезагрузке или завершении работы

[Service]
Type=oneshot RemainAfterExit=true ExecStart=/path/to/myscript.sh

[Install]
WantedBy=многопользовательская.цель

Вот что делает каждый раздел:

  • [Unit]: этот раздел используется для указания метаданных и зависимостей. Директива Description предоставляет осмысленное описание службы.
  • [Service]: этот раздел используется для указания того, как следует запускать службу. Директива Type=oneshot указывает, что служба будет запущена один раз, а затем завершится. Директива RemainAfterExit=true указывает systemd считать службу активной после завершения ее основного процесса. Директива ExecStart указывает команду, которая будет выполняться при запуске службы — в данном случае это наш скрипт.
  • [Install]: этот раздел используется для указания способа установки службы. Директива WantedBy=multi-user.target создает символическую ссылку на файл службы в указанном месте, что гарантирует запуск службы в процессе загрузки.

Не забудьте заменить /path/to/myscript.sh фактическим путем к вашему скрипту.

Включение службы

После создания файла службы вы можете включить службу с помощью следующей команды:

sudo systemctl включить myscript.service

Эта команда создает необходимые символические ссылки для запуска службы при выходе из системы, перезагрузке или завершении работы.

Тестирование службы

Чтобы протестировать сервис, вы можете перезагрузить систему. После перезагрузки проверьте лог-файл, указанный в вашем скрипте. Вы должны увидеть новую строку с датой и временем перезагрузки.

Заключение

В этом руководстве мы показали вам, как запустить скрипт при выходе из системы, перезагрузке или завершении работы в Ubuntu с помощью systemd. Это мощная функция, которую можно использовать для автоматизации широкого круга задач. Как всегда, не забудьте тщательно протестировать свои сценарии, чтобы убедиться, что они работают должным образом. Если вы используете более старую версию Ubuntu или другую систему инициализации, вам может потребоваться соответствующим образом адаптировать эти инструкции. Для получения дополнительной информации ознакомьтесь с официальная системная документация.

Помните, с большой силой приходит большая ответственность. Всегда будьте осторожны при запуске сценариев при таких критических системных событиях.

Да, вы можете создать несколько служб systemd для каждого скрипта, который хотите запустить. Просто выполните те же шаги, указанные в руководстве для каждого скрипта.

Да, вы можете указать порядок, создав зависимости между службами systemd. Вы можете использовать директиву After в [Unit] раздел служебного файла для указания зависимостей. Например, если вы хотите, чтобы myscript2.service запускался после myscript1.service, вы можете добавить After=myscript1.service в [Unit] раздел файла myscript2.service.

Чтобы отключить скрипт, вы можете использовать следующую команду: sudo systemctl disable myscript.service. Это удалит символические ссылки, созданные во время процесса включения, и предотвратит запуск сценария при выходе из системы, перезагрузке или завершении работы.

По умолчанию службы systemd работают в неграфической среде. Если вы хотите запустить графическое приложение, вам нужно указать дисплей и файл Xauthority в сервисном файле. Добавьте Environment=”DISPLAY=:0″ и Environment=”XAUTHORITY=/home//.Xauthority” в [Service] раздел, заменив вашим фактическим именем пользователя.

Да, вы можете указать пользователя, добавив директиву User в [Service] раздел служебного файла. Например, добавьте User=johndoe, чтобы запустить скрипт от имени пользователя «johndoe».

Да, если вы хотите запустить скрипт от имени пользователя root, вы можете опустить директиву User в [Service] раздел служебного файла. По умолчанию службы systemd запускаются от имени пользователя root, если не указана директива User.

Путь к файлу журнала, указанный в сценарии, должен быть абсолютным путем. Если вы не уверены в фактическом пути, вы можете проверить файл службы (myscript.service), чтобы найти точное местоположение файла журнала.

Хотя это руководство посвящено Ubuntu, система инициализации systemd широко используется в различных дистрибутивах Linux. Шаги должны быть аналогичны другим дистрибутивам, использующим systemd в качестве системы инициализации по умолчанию. Однако могут быть небольшие различия, поэтому всегда рекомендуется обращаться к документации или ресурсам, относящимся к вашему дистрибутиву.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *