MyUnit2.service
[Unit]
Description = MyUnit2
[Service]
RemainAfterExit=true
ExecStart=/usr/mscript2
Type=oneshot
[Install]
WantedBy=shutdown.target reboot.target
mscript2
\> /var/log/mlog2.log
echo "Time:" >> /var/log/mlog2.log
date >> /var/log/mlog2.log
echo "Uptime:" >> /var/log/mlog2.log
uptime >> /var/log/mlog2.log
В соответствии с задачей необходимо, чтобы скрипт выполнялся после завершения работы, перезагрузки, выхода пользователя. Первые два варианта я сделал. Как мне закончить работу?
Вы могли пойти несколькими путями для запуска сценария после пользовательского выхода из системы. Может быть больше, но здесь два, о которых я знаю
я не знаком с деталями или достоинствами первого маршрута, таким образом, я только опишу второй маршрут.
В быстром тесте я вошел в систему как другой пользователь на другом tty и проверил, что мой процесс (простое echo
сообщение) был успешно запущен/выполнен после выхода из системы (cmd logout
) этого пользователя. Это хорошо работало в находящейся в debian системе с systemd v232.
Мой пример содержит три элемента:
# /lib/systemd/system/user@.service
[Unit]
Description=User Manager for UID %i
After=systemd-user-sessions.service
[Service]
User=%i
PAMName=systemd-user
Type=notify
ExecStart=-/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=yes
TasksMax=infinity
TimeoutStopSec=120s
# /etc/systemd/system/user@.service.d/afterlogout.conf
[Service]
Environment="USERUID=%i"
ExecStartPost=+/bin/systemctl start helperunit@${USERUID}.service
# /etc/systemd/system/helperunit@.service
[Unit]
Description=helper-to-start-afterlogout-service Service
BindsTo=user@%i.service
[Service]
Environment="USERUID=%i"
RemainAfterExit=yes
Type=oneshot
ExecStart=/bin/true
ExecStopPost=/bin/systemctl start afterlogout@${USERUID}.service
[Install]
# /etc/systemd/system/afterlogout@.service
[Unit]
Description=trigger-script-after-user-logout Service
Before=reboot.target shutdown.target
[Service]
Environment="USERUID=%i"
Type=oneshot
ExecStart=/bin/echo "user UID=${USERUID} has logged out"
[Install]
способ, которым это настраивается, сервисные экземпляры будут иметь пользователя UID на их имя (например, afterlogout@1000.service)