**关闭。**这个问题是not about programming or software development。目前不接受答复。
这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
6天前关闭。
Improve this question
我是写这些服务文件的新手,我通过关注堆栈和unix溢出中的几个博客写了一个systemd服务文件。
我有一个需要在关机时运行的脚本,它需要运行docker守护进程。服务文件如下所示
[Unit]
Description=Shutdown script
Before=shutdown.target
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=/path/to/script
[Install]
WantedBy=multi-user.target
我试图通过在shell脚本中添加以下内容,在示例的启动脚本中自动创建/启用上述服务(运行脚本)
chmod +x /path/to/script
if [ ! -f "/etc/systemd/system/path.service" ]; then
cp file/path.service /etc/systemd/system/path.service
systemctl daemon-reload
fi
systemctl enable path.service
我希望它在每次关机时运行,但它在示例启动时运行。我在上面的服务文件中做错了什么吗?
1条答案
按热度按时间gk7wooem1#
查看:systemd-poweroff.service、systemd-halt.service、systemd-reboot.service、systemd-kexec.service、systemd-shutdown -系统关闭逻辑
简介
说明
systemd-poweroff.service是由www.example.com引入的系统服务poweroff.target,负责实际的系统断电操作。类似地,systemd-halt.service由www.example.com拉入halt.target,systemd-reboot.service由reboot.target拉入,systemd-kexec.service由kexec.target拉入以执行相应的动作。
当这些服务运行时,它们确保PID 1被/usr/lib/systemd/systemd-shutdown工具替换,该工具随后负责实际关闭。在关闭之前,此二进制文件将尝试卸载所有剩余的文件系统,禁用所有剩余的交换设备,分离所有剩余的存储设备并杀死所有剩余的进程。
有必要将此代码放在单独的二进制文件中,因为否则升级后重新启动可能会中断-运行的PID 1可能仍然依赖于不再可用的库,从而使文件系统保持忙碌,然后无法以只读方式重新挂载。
在执行实际的系统关机/停机/重新启动/kexec之前,systemd-shutdown将运行/usr/lib/systemd/system-shutdown/中的所有可执行文件,并向它们传递一个参数:或者是“断电”、“停止”、“重新启动”或“执行”,这取决于所选择的操作。此目录中的所有可执行文件都将并行执行,在所有可执行文件完成之前不会继续执行操作。
注意,systemd-poweroff.service(以及相关单元)永远不应该直接执行。相反,使用“systemctl poweroff”之类的命令触发系统关闭。
尝试什么
由于操作系统在关机时已经有了Service,所以只需在/usr/lib/systemd/system-shutdown/中添加bash可执行文件,它将在关机时运行