Wie man von einem Startjob aus einem Init-Skript unter Ubuntu 12.04 abhängt


10

Ich verwende Ubuntu 12.04 LTS und dieses System verwendet hauptsächlich Upstart-Jobs. Leider hängt mein System auch von einem manuell kompilierten dbmail- Server ab, der nur ein Init-Skript, aber kein Upstart-Skript enthält.

Mit update-rc.d dbmail defaultsIch habe dbmail für alle Runlevel installiert, aber leider wird es gestartet, bevor MySQL aktiv ist, sodass der Daemon erneut stirbt. Ich habe auch versucht, es auf S90 oder ähnliches zu verschieben, aber MySQL ist immer noch nicht verfügbar, wenn das Skript ausgeführt wird.

Ich habe versucht, dem LSB-Header des Skripts wie folgt eine Abhängigkeit hinzuzufügen:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          dbmail
# Required-Start:    $local_fs $remote_fs $syslog $network mysql
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start dbmail services
# Description:       Run network services provided by dbmail such as
#                    imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO

Leider scheint das Skript noch vor MySQL gestartet zu sein. Ich bin an altmodische Init-Skripte gewöhnt, nicht daran, Jobs neu zu starten, daher bin ich hier etwas verwirrt. Wie kann ich die Abhängigkeit hinzufügen oder wie kann ich den mysqlJob vor dem dbmailInit-Skript starten lassen ?

Wie kann ich die Startreihenfolge für Jobs + Init-Skripte während des Startvorgangs überprüfen / anzeigen? Gibt es dafür ein Werkzeug?

Das manuelle Starten des Skripts von einer Shell nach dem Start funktioniert einwandfrei, da MySQL dann bereits ausgeführt wird.


Was als hässliche Umgehung funktionierte, war das Hinzufügen eines "Schlafes 3" in der "start ()" - Funktion des Init-Skripts. Aber es muss einen saubereren Weg geben, dies missbraucht nur eine Rennbedingung und ich würde das wirklich gerne richtig beheben.
Martin C.

Antworten:


12

Ich denke , wenn Sie laufen /etc/init.d/dbmail startaus /etc/rc.local, es nach allen Ihren Emporkömmling Jobs / andere Init - Skripte gestartet.

Allerdings würde ich dies wahrscheinlich beheben, indem ich einen neuen Startjob bei hinzufüge /etc/init/dbmail.conf. Normalerweise enthalten init.d-Skripte viel Code zum Überprüfen des Status usw., den Upstart für Sie erledigt. Es könnte so einfach sein wie:

start on started mysql
exec /usr/local/bin/dbmail

Oder Sie können das vorhandene Init-Skript wahrscheinlich folgendermaßen verwenden:

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.