Что мне нужно поместить в [install]
раздел, чтобы systemd работал /home/me/so.pl
прямо перед выключением, а также перед /proc/self/net/dev
уничтожением?
[Unit]
Description=Log Traffic
[Service]
ExecStart=/home/me/so.pl
[Install]
?
Предлагаемое решение состоит в том, чтобы запустить сервисный модуль как обычный сервис - взгляните на [Install]
раздел. Так что все нужно думать наоборот, зависимости тоже. Потому что порядок выключения является обратным порядком запуска. Вот почему сценарий должен быть помещен в ExecStop=
.
Следующее решение работает для меня:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
нужен, когда у вас нет ExecStart
действия.
После создания файла убедитесь, что systemctl daemon-reload
и systemctl enable yourservice --now
.
Я только что получил это от systemd IRC, кредиты идут в mezcalero.
ExecStart=/bin/true
.RemainAfterExit=true
требуется, когда нетExecStart
, потомуsystemd
что не будет пытаться запустить,ExecStop
если он думает, что служба не работает.RemainAfterExit=true
приводитsystemd
к считаю , что служба работает, тем самым заставляя его работатьExecStop
при выключении.Note that it is usually not sufficient to specify a command for this setting that only asks the service to terminate (for example, by queuing some form of termination signal for it), but does not wait for it to do so.
Насколько я вижу, это делает то, что мне нужно (но я не знаю точно, почему).
источник
kexec.target
в бит ДоWantedBy=shutdown.target reboot.target halt.target
в[Unit]
раздел.Before=
&After=
не меняйте зависимости.Чтобы запустить службу прямо перед запуском любой из служб reboot / shutdown / halt / kexec (т. Е. В последний момент перед тем, как корневая файловая система станет перемонтированной только для чтения), используйте эту конфигурацию службы:
Включить его с помощью:
Чтобы запустить скрипт непосредственно перед фактической перезагрузкой / shutdown / halt / kexec (когда вы не можете записать в корневую файловую систему, потому что он был перемонтирован только для чтения), добавьте этот исполняемый файл скрипта в
/usr/lib/systemd/system-shutdown
каталог.Также см:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
источник
final.target
. В идеале мне бы хотелось, чтобы это было первое, что выполняется после того, как пользователь это сделал$ sudo reboot
.Я не совсем уверен, но я не думаю, что вам нужна часть установки, хотя я добавил ее явно. Я также не проверял это, но я думаю, что это должно помочь вам начать:
источник