Upstart 脚本和 start-stop-daemon

Upstart 脚本和 start-stop-daemon

我遇到一个问题,编写 upstart 脚本会多次调用该脚本,导致我的 IRCd 生成大约 8 次左右。为了纠正这个问题,我使用了 start-stop-daemon:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

这完全符合我的要求,除了:

stop ircd

说它停止了,但是 inspircd 之后仍然在运行。

有没有比使用 start-stop-daemon 更好的方法来阻止脚本打开 8 个实例,或者有没有办法使它与 start-stop-daemon 兼容?

答案1

我不能完全确定,但 inspircd 可能会在运行时分叉,因此 Upstart 不知道其 PID 到底在哪里。如果是这种情况,则可以修复,因为 Upstart 有两个用于处理分叉进程的节:

  • expect fork捕获分叉一次的进程(在我看来,这里的情况最有可能)。
  • expect daemon抓住两次分叉的东西……这可能正在做。

尝试一下这个:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

如果这不起作用,请检查我的su语句以确保它可以从命令行工作,然后更改expect forkexpect daemon并再试一次。


编辑bash包装器可能会弊大于利。这可能是更好的执行方式:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

相关内容