我在/etc/rc.d中有一个非常简单的D0服务:
#!/bin/bash
PIDFILE="/var/run/test.pid"
status() {
if [ -f "$PIDFILE" ]; then
echo 'Service running'
return 1
fi
return 0
}
start() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")"; then
echo 'Service already running'
return 1
fi
echo 'Starting...'
test & echo $! > "$PIDFILE"
return 0
}
stop() {
if [ ! -f "$PIDFILE" ] || ! kill -0 "$(cat "$PIDFILE")"; then
echo 'Service not running'
return 1
fi
echo 'Stopping...'
kill -15 "$(cat "$PIDFILE")" && rm -f "$PIDFILE"
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac当系统启动时,它将启动服务。
但是当系统停止时,它从不调用停止命令。我可以考虑的唯一原因是,系统要么认为服务没有运行,要么没有正确启动。
但是,这方面的要求是什么?
/var/lock/subsys中创建一个文件来表示它是活动的?发布于 2023-04-18 20:42:06
看起来,Synology在DSM 6中从经典的SysVinit迁移到了upstart,然后在DSM 7中转到了systemd。这两个init系统都为经典的SysVinit风格的开始/停止脚本提供了向后兼容性,但是有一些怪癖你应该知道。
如果您有DSM7.0或更高版本,那么在安装脚本之后,您可能应该运行systemctl daemon-reload,因此systemd-sysv-generator应该为它自动创建一个.service文件(可能在/run/systemd中)。然后您可以使用systemctl start </code>启动脚本,实际上应该这样做,而不是手动运行脚本。只有当<strong> <code>systemd</code> </strong>实际执行了相应的启动作业时,它才会意识到运行<code><your script> stop</code>作业的必要性。</div><div>这是因为<code>systemd</code>将在启动每个服务时将其设置为一个单独的进程控制组(而手动运行start脚本的管理员不会这样做)。</div><div>对于服务本身来说,这是完全不可见的(除非它们专门去寻找它),服务的任何子进程都将继承此控制组成员资格。如果控制组中没有剩余的进程,它将自动停止存在。</div><div>当关闭时,<code>systemd</code>将只遍历现有的控件组,并为它找到的任何非默认控件组运行停止命令。没有使用<code>systemctl start</code>而启动的任何服务都将是“管理员的交互式会话”控件组的一部分,而不是“服务X”控件组,并且基本上是在不运行相应的停止脚本的情况下被杀死的。</div><div>如果服务因某种原因死亡,则需要自动重新启动等功能,则应考虑对适用的init系统使用适当的“本机”配置方法:</div><ul><li><div>语法DSM6.x系列中Upstart的<code>/etc/init/*</code>文件</div></li><li><div><code>/etc/systemd/system/*.service</code>文件系统在语法DSM7.x系列和更新。这些init系统具有内置的自动重新启动功能,您只需少量配置即可使用,而不必自己编写包装器脚本来查看服务流程。</div></li></ul><div><a href="https://help.synology.com/developer-guide/integrate_dsm/resource_acquisition/resource_acquisition/integrate_dsm/integrate_dsm/integrate_dsm/examples/examples/examples/publish_package/publish_package/">DSM 7语法开发指南</a></div><div><a href="https://global.download.synology.com/download/Document/Software/DeveloperGuide/Firmware/DSM/6.0/enu/DSM_Developer_Guide_6_0.pdf">DSM 6语法开发指南</a></div><div><a href="https://gist.github.com/SanCoder-Q/f3755435e6e8bd46ba95bf0ec54ae1a4">关于为DSM 6和7配置服务的可能有用的说明</a></div>
https://unix.stackexchange.com/questions/743237
复制相似问题