Uaktualnij skrypt i start-stop-demona

8

Miałem problem polegający na tym, że utworzenie skryptu początkowego wywoływało go wielokrotnie, powodując odrodzenie mojego IRCd około 8 razy. Aby to naprawić, użyłem 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

Działa to dokładnie tak, jak chcę, Z WYJĄTKIEM:

stop ircd

mówi, że to zatrzymuje, ale inspircd wciąż działa.

Czy istnieje lepszy sposób niż użycie demona start-stop, który powstrzyma skrypt przed otwarciem 8 instancji, czy też jest jakiś sposób, aby uczynić go kompatybilnym z demonem start-stop?

Liam Dawson
źródło

Odpowiedzi:

6

Nie jestem do końca pewien, ale inspircd może wymyślać sposób działania, więc Upstart nie wie, gdzie naprawdę jest jego PID. W takim przypadku można to naprawić, ponieważ Upstart ma dwie sekcje do obsługi procesów rozwidlania:

  • expect fork wyłapuje procesy rozwidlające się raz (imo, najprawdopodobniej przypadek tutaj).
  • expect daemonłapie rzeczy, które rozwidlają się dwa razy ... Co to może być.

Spróbuj tego:

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

A jeśli to nie pomoże, sprawdź mój su-statement aby upewnić się, że działa z wiersza poleceń, a następnie zmieni expect forksię expect daemoni dać im kolejną wir.


Edycja bashopakowania może wyrządzić więcej szkody niż pożytku. Może to być lepsze wykonanie:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf
Oli
źródło
Dziękuję Ci! Działa bardziej schludnie i tak expect forknaprawiono problem. Jednak nadal nie mogę wywołać „stop ircd” i zatrzymać skrypt. Poradzę sobie jednak bez niego (ps aux, kill), ale jeśli możesz zmienić swoją odpowiedź, aby zawierała sposób na to, będę bardzo szczęśliwym użytkownikiem Ubuntu;)
Liam Dawson
Hmm - po uruchomieniu sudo start ircdpowinien wyprowadzić PID. Jeśli przykleisz to na końcu ps(np . ps u -p <PID>:), czy to pokazuje proces, który ma sens? Jeśli tak się nie stanie, nadal traci ślad PID, więc możesz spróbowaćexpect daemon
Oli
W rzeczywistości nie wyprowadza PID, tylko niektóre wyjście konsoli. No cóż, ps aux, kill <pid>działa dobrze, byłem bardziej zaniepokojony co skrypt startowy przy starcie, co robi. Dzięki!
Liam Dawson,