Answers:
建议的解决方案是将服务单元作为普通服务运行-请参阅本[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
。
我只是从系统化的IRC那里获得的,信用将用于mezcalero。
RemainAfterExit=true
ExecStart
systemd
ExecStop
RemainAfterExit=true
systemd
ExecStop
据我所见,这确实满足了我的需要(但我不知道为什么)。
[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot
kexec.target
到Before位
WantedBy=shutdown.target reboot.target halt.target
到本[Unit]
节中,否则我看不到它将如何工作。Before=
&After=
不要更改依赖关系。
要在启动任何重新启动/关闭/停止/ kexec服务之前(即在根文件系统变为只读挂载前的最后一刻之前)运行服务,请使用以下服务配置:
[Unit]
Description=Save system clock on shutdown
DefaultDependencies=no
After=final.target
[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save
[Install]
WantedBy=final.target
通过以下方式启用它:
systemctl enable my_service.service
要在实际的重新引导/关机/停止/ kexec 之前运行脚本(当您无法写入根文件系统时,因为它是只读安装的,则需要将该脚本可执行文件)添加到/usr/lib/systemd/system-shutdown
目录中。
在执行实际系统暂停/电源关闭/重新启动/ kexec之前,systemd-shutdown将立即在/ usr / lib / systemd / system-shutdown /中运行所有可执行文件,并将一个参数传递给它们:“ halt”,“ poweroff”,“ reboot” ”或“ kexec”,具体取决于所选操作。此目录中的所有可执行文件都并行执行,并且在所有可执行文件完成之前不会继续执行操作。
另请参阅:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
final.target
。理想情况下,我希望这是用户执行之后要执行的第一件事$ sudo reboot
。
我不确定,但我不认为您需要安装部分,尽管我已明确添加了它。我也没有测试它,但我认为它应该可以帮助您入门:
[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no
[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
ExecStart=/bin/true
。