我正在寻找一种标准方法或最佳实践来保持由init.dshell 脚本启动的守护进程。
或者更好的是,有没有办法让它直接从/etc/init.d?
具体来说,我有一个名为 dtnd 的守护进程,它具有无限循环,用于查找意外结束的进程,如果有的话,守护进程会再次唤醒它们。此外,我使用 start-stop-daemon 工具来让进程从给定的系统用户运行。
我想从启动时运行这个 dtnd 守护进程。为了实现这种行为,我创建了一个 init.d 脚本,它使用 start、stop 和 status 命令“包装”dtnd 文件。
我有两个问题要解决:
有没有办法从 init.d shell 脚本中实现使某些进程保持活动状态。是标准/最佳实践吗?
建议使用无限循环保持进程存活?我想最好使用一些命令respawn来实现这一点。这是正确的?
我知道respawn命令的存在。我认为这就是我需要的,但我不明白之间的工作流程/etc/init.d/和/etc/init。谁能帮我?
请注意,我没有inittab文件既没有暴发户(我只被允许使用/etc/init,/etc/init.d,cron和系统工具start-stop-daemon。我的意思是,只有默认工具)
非常感谢您的参与!
我已经在 Debian 8 中使用 Systemd 一段时间了。我使用 Restart=on-failure 选项在出现故障时唤醒服务。
我想知道如果服务没有侦听特定端口(即使进程仍在运行),是否有办法强制重新启动服务。
我需要它的原因是因为我们正在开发新功能来解决这个问题,但这需要一段时间。同时,我们需要一个解决方法。
我开发了一个脚本来检查该状态:
#! /bin/bash
PORTS=( 1452 542 )
for port in ${PORTS[@]}; do
netstat -anp | grep $port > /dev/null 2>&1
if [ "$?" -ne 0 ]; then
# Port blocked. Kill the running process and start it again after a while
done
Run Code Online (Sandbox Code Playgroud)
这个脚本是使用 cron 定期触发的。我知道这是一个肮脏的把戏。这就是为什么我想在 Systemd 检查中集成该行为。那可能吗?
先感谢您。
干杯,
一种。