Upstart-Skript und Start-Stop-Daemon

8

Ich hatte ein Problem, bei dem das Erstellen eines Upstart-Skripts das Skript mehrmals aufrief und dazu führte, dass meine IRCd ungefähr acht Mal erzeugt wurde. Um dies zu korrigieren, habe ich start-stop-daemon verwendet:

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

Dies funktioniert genau so, wie ich es möchte, AUSSER:

stop ircd

sagt, dass es es stoppt, aber inspircd läuft danach noch.

Gibt es einen besseren Weg als den Start-Stop-Daemon, der verhindert, dass das Skript 8 Instanzen öffnet, oder gibt es eine Möglichkeit, es mit dem Start-Stop-Daemon kompatibel zu machen?

Liam Dawson
quelle

Antworten:

6

Ich kann nicht ganz sicher sein, aber inspircd könnte den Weg ebnen, wenn es ausgeführt wird, sodass Upstart nicht weiß, wo seine PID wirklich ist. Wenn dies der Fall ist, kann dies behoben werden, da Upstart zwei Zeilengruppen für die Handhabung von Gabelprozessen hat:

  • expect fork fängt Prozesse ab, die sich einmal teilen (imo, höchstwahrscheinlich hier der Fall).
  • expect daemonfängt Dinge auf, die zweimal herauskommen ... Was dies möglicherweise tut.

Versuchen Sie Folgendes:

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

Und wenn das nicht funktioniert, überprüfen Sie meine su-Statement, um sicherzustellen, dass es über die Befehlszeile funktioniert, und wechseln Sie dann expect forkzu expect daemonund geben Sie ihm einen weiteren Wirbel.


Das Bearbeiten des bashWrappers kann mehr schaden als nützen. Dies könnte eine bessere Ausführung sein:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf
Oli
quelle
Vielen Dank! Es funktioniert ordentlicher und ja, expect forkdas Problem wurde behoben. Ich kann jedoch immer noch nicht 'stop ircd' aufrufen und das Skript stoppen lassen. Ich werde es jedoch ohne schaffen (ps aux, kill), aber wenn Sie Ihre Antwort dahingehend ändern können, dass dies möglich ist, werde ich ein sehr glücklicher Ubuntu-Benutzer sein;)
Liam Dawson
Hmm - wenn Sie es ausführen sudo start ircd, sollte es eine PID ausgeben. Wenn Sie das am Ende von ps(zB :) ps u -p <PID>festhalten, zeigt das einen Prozess, der Sinn macht? Wenn dies nicht der Fall ist, verliert es immer noch den Überblick über die PID. Vielleicht möchten Sie es versuchenexpect daemon
Oli
Tatsächlich wird keine PID ausgegeben, sondern nur eine Konsolenausgabe. Na ja, ps aux, kill <pid>funktioniert gut, ich war mehr besorgt über das Skript beginnen, beim Booten, was es tut. Vielen Dank!
Liam Dawson