Upstart脚本和start-stop-daemon


8

我遇到一个问题,即制作新贵脚本会多次调用该脚本,从而导致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兼容?

Answers:


6

我不能完全确定,但是inspircd可能会在运行时分叉,所以Upstart不知道其PID的实际位置。如果是这样,可以修复此问题,因为Upstart有两个节用于处理分支过程:

  • expect fork 捕获一次分叉的进程(imo,这里很可能是这种情况)。
  • 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-statement以确保它在命令行中有效,然后更改expect forkexpect daemon并再次旋转。


编辑bash包装器可能弊大于利。这可能是一个更好的执行程序:

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

谢谢!它工作更整洁,是的,expect fork解决了该问题。但是,我仍然无法调用“ stop ircd”并使脚本停止。但是,我会在没有它的情况下进行管理(ps aux,kill),但是如果您可以修改答案以包括做到这一点的方法,那么我将是一个非常高兴的Ubuntu用户;)
Liam Dawson

嗯-运行sudo start ircd时应该输出PID。如果将其贴在ps(例如:)的末尾,ps u -p <PID>是否表示一个有意义的过程?如果不是,它仍然会丢失对PID的跟踪,因此您可能要尝试expect daemon
Oli

实际上,它不输出PID,仅输出一些控制台输出。哦,ps auxkill <pid>做工精细,我更关心的是使脚本在引导时启动,这确实。谢谢!
利亚姆·道森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.