У меня была проблема, из-за которой при создании сценария 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?
Я не могу быть полностью уверен, но 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
-статист, чтобы убедиться, что оно работает из командной строки, а затем измените expect fork
на expect daemon
и еще раз поверните его.
Отредактируйте оболочку bash
, это может принести больше вреда, чем пользы. Это может быть лучшим исполнителем:
exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf