Upstart скрипт и запуск-остановка-демон

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?

Лиам Доусон
источник

Ответы:

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-состояние, чтобы убедиться, что оно работает из командной строки, а затем измените expect forkего expect 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;)
Лиам Доусон
Хм - при запуске sudo start ircdон должен выводить PID. Если вы добавите это в конец ps(например ps u -p <PID>:), это показывает процесс, который имеет смысл? Если это не так, он все еще теряет PID, так что вы можете попробоватьexpect daemon
Oli
На самом деле, он не выводит PID, просто вывод на консоль. Ну, ps aux, kill <pid>работает отлично, я был более обеспокоен о том , чтобы скрипт START при загрузке, что она делает. Спасибо!
Лиам Доусон