Задача: Сделать автоматический запуск нашего скрипта перед перезагрузкой и выключением компьютера.
Для примера создадим скрипт выполняющий обновление системы перед выключением.
Для управления загрузкой и работой сервисов в 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
[Service]
ExecStop=/bin/bash '/usr/local/bin/distupgrade.sh'
Type=oneshot
RemainAfterExit=yes
[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
Включаем наш новый юнит
sudo systemctl enable poweroff_dist_upgrade.service
Всё, теперь после этого при выключении и перезагрузки компьютера будет автоматически запускаться наш скрипт /usr/local/bin/distupgrade.sh
Для отключения используем
sudo systemctl disable poweroff_dist_upgrade.service