Ausgehend von dieser Frage habe ich einen einfachen Upstart-Dienst ( /etc/init/pms.conf ) für meine Ubuntu Server 11.04-Box ohne Kopf wie folgt geschrieben:
start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn
exec /home/administrator/pms-current/PMS.sh
Ich kann diesen Dienst nach Belieben über die Befehlszeile starten (oder stoppen):
service pms start
Und ich kann sehen, dass es tatsächlich läuft.
Wenn ich meinen Computer zum ersten Mal starte, wird der Dienst jedoch nicht gestartet. Wenn ich in die Box SSH und überprüfen Sie den Service-Status bekomme ich:
$ service pms status
pms stop/waiting
Meine Frage ist, warum das passiert? Warum startet mein Dienst nicht beim Booten?
UPDATE 1 : Unsicher, ob mein Dienst gestartet wurde und anschließend abstirbt oder überhaupt nicht gestartet wurde, habe ich PMS.sh wie folgt hinzugefügt:
echo "STARTED" > $STARTLOG
Das gibt mir offensichtlich nur etwas zu suchen. Ich habe dies getestet, indem ich den Dienst selbst gestartet und dann start.log überprüft habe . Ich habe dann das start.log gelöscht und neu gestartet. Es war nach dem Neustart nicht da, also scheint es, als würde durch den Neustart definitiv nicht mein Dienst gestartet. Ich nehme an, es könnte zu einem früheren Zeitpunkt in dem Prozess sterben, aber das scheint angesichts der Einfachheit des Ganzen eher unwahrscheinlich.
UPDATE 2 : Ich habe gerade ein Upgrade auf 11.10 durchgeführt, das ein Upstart-Upgrade beinhaltet, aber dieses Problem tritt immer noch auf.
UPDATE 3 : Wie gewünscht habe ich mit gebootet --debug
. Die Ausgabe von cat /var/log/syslog | grep init
ist zu lang, um sie in die Frage zu stellen, aber Sie sehen sie hier .
UPDATE 4 : Weitere Protokolle, diesmal ist die Upstart-Konfig ganz oben enthalten. Führen Sie 1 und 2 aus .
cat /var/log/syslog | grep init
nachdem Sie die Boot-Protokollierung für den Upstart aktiviert haben. Befolgen Sie dazu die Anweisungen unter Upstart DebuggingAntworten:
Ich würde empfehlen, die Ausführlichkeit des Jobs zu erhöhen, z. B. durch die Verwendung von Einträgen vor dem Start / nach dem Start.
Weitere Informationen unter http://upstart.ubuntu.com/cookbook/
Schauen Sie sich auch http://upstart.ubuntu.com/wiki/Debugging an
quelle
Was hier wahrscheinlich passiert, ist, dass pms gestartet wird, bevor Ihre Netzwerkadapter hochgefahren werden, und wahrscheinlich sogar vor dem Loopback-Adapter (lo). Angenommen, wir sprechen von PS3 Media Server, es handelt sich um einen Netzwerkdienst, und es mag wahrscheinlich keinen Start ohne verfügbare Schnittstellen.
Versuchen Sie, Ihren Start anhand folgender Kriterien zu ändern:
Das heißt, starten, nachdem eine "echte" Netzwerkschnittstelle aktiv ist. Dies ist jedoch möglicherweise nicht ideal. Wenn eth0 die nächste Schnittstelle ist, wird PMS gestartet, aber Sie möchten wirklich, dass PMS wlan0 verwendet. Dies reicht nicht aus. Der Dienst wird gestartet, konnte jedoch möglicherweise nicht die Schnittstelle auswählen, die abgehört werden soll. Vorausgesetzt, Sie kennen die Schnittstelle, über die Sie streamen werden, und sie wird sich nicht ändern, würde ich sie fest in den Job einprogrammieren, z. B .:
In Oneiric (11.10) können Sie das Ereignis verwenden
static-network-up
, um auf alle statisch konfigurierten Geräte zu warten. Das ist schön, weil Sie damit netzwerkabhängige Jobs schreiben können, ohne eine Schnittstelle fest zu codieren. [Hinweis: Bei "allen statisch konfigurierten Geräten" beziehe ich mich auf die Verwendung/etc/network/interfaces
anstelle von NetworkManager. Es bedeutet nicht statisch im Sinne von statischer IP vs. DHCP.]quelle
lo
undeth0
doch habe ich Ihren zweiten Vorschlag:start on filesystem and net-device-up IFACE=eth0
. Immer noch kein Erfolg nach einem Neustart. Ich habe gerade etwas im PMS-Protokoll bemerkt, das möglicherweise ein Hinweis ist. Ich werde nachforschen und zurückkommen ...sleep 10
- oder höheres - "Pre-Start-Skript" einzugeben, bevor das Shell-Skript ausgeführt wird.Von der Prüfung Ihres Syslogs an startet der pms-Prozess fehlerfrei. Nach kurzer Zeit ändert sich sein Ziel von Start zu Stop, was bedeutet, dass es getötet wird.
Dies ist etwas seltsam, da Sie die repsawn-Klausel hinzugefügt haben, sodass sie versuchen sollte, erneut zu starten, nachdem sie angehalten wurde, dies jedoch niemals tut. Ich vermute, Sie haben die Respawn-Klausel entfernt.
Zwischen dem Starten und Stoppen des pms-Dienstes werden nur 2 Dienste ufw und die Netzwerkschnittstelle (eth0) gestartet, und 1 wird udev-fallback-graphics gestartet.
Es scheint, dass Sie pms verarbeiten, wird parallel gestartet. Leider ist die Dokumentation des Emporkömmlings in Bezug auf die genauen Unterschiede zwischen
start on ...
Vanille undstart on starting ...
und etwas verschwommenstart on started ...
.Versuchen Sie, Ihre Startzeilengruppe in zu ändern
oder einfach auch
Die Protokollausgabe ist etwas seltsam, da das Ereignis net-device-up viel später eintritt, pms jedoch davor startet.
Dies sollte sicherstellen, dass Ihr Prozess erst startet, wenn alle Netzwerkeinstellungen abgeschlossen sind, dh der Job nicht nur gestartet, sondern beendet wurde.
Vertrauen Sie auch der Protokollausgabe nicht vollständig, da die Protokollausgabe zu Beginn des Startvorgangs in einer beliebigen Datei nicht immer funktioniert. Siehe die Antwort in Debugging Upstart
quelle
Es ist gelungen, ein ähnliches Problem zu beheben, indem stattdessen start on runlevel verwendet wurde:
quelle
Ich hatte das gleiche Problem und löste es schließlich einfach mit:
start on runlevel [2345]
ohne irgendwelche
net-device-up
oderstarted networking
solche SachenDies ist das vollständige Upstart-Skript und es funktioniert perfekt:
quelle
Ich bin auf folgendes
chkconfig
bei meinem RHCSA / CE-Training gestoßen:Auf der Oneiric- Manpage finden Sie weitere Informationen zu den Funktionen.
quelle
Ich habe eine Lösung dafür gefunden, aber ich verstehe es nicht. Wenn ich PMS von
/home/administrator
und nach/bin/pms
mit root als Eigentümer verschiebe, funktioniert alles einwandfrei.Wenn ich es unter lasse,
/home/administrator/
aber sicherstellen, dass root der Eigentümer von allem ist, abgesehen vom/home/administrator/
Verzeichnis selbst, funktioniert es immer noch nicht.Wenn ich Administrator als Eigentümer von allem festlege und den entsprechenden Teil meines Skripts in Folgendes ändere:
Es funktioniert immer noch nicht.
Ich nehme an, ich mache jetzt ein
/home/root/
Verzeichnis und verschiebe alles dorthin, obwohl ich das wirklich gerne vollständig verstehen würde.quelle
chkconfig
auch nicht funktioniert? Haben Sie versucht, das VerzeichnisPMS.sh
anzugeben, in dem sich root befindet? Wenn nur Ihre Lösung funktioniert, rufen Sie die Launchpad-Seite von Upstart auf und wenden Sie sich direkt an die Entwickler..sh
einfach alles dort und bearbeiten Sie das Skript, um auf dieses Verzeichnis zu verweisen (oder vielleicht sogar das Verzeichnis zu ändern?).Ich hatte ein ähnliches "no start" -Problem, als ich feststellte, dass mein Skript von einer Datei abhing, die sich in meinem Heim befand, und auf die nicht zugegriffen werden konnte, weil sie mit dem Standard-Ubuntu-Mechanismus (.Private) verschlüsselt war.
start on local-filesystems
Das Ereignis wird (wahrscheinlich) ausgegeben, bevor der Entschlüsselungsprozess beendet ist.quelle
Ist Ihr Home-Verzeichnis auf NFS? Manchmal kann root nicht auf NFS zugreifen.
Fürs Protokoll, in meinem kleinen Test gerade am 12.04:
start on started networking
undstart on network-interface-up INTERFACE=eth0
nicht arbeiten, aberstart on started network-interface INTERFACE=eth0
tut.Dank http://os4.org/wiki/upstart.html für den Hinweis auf , dass
initctl list
immer Arbeit zeigt , wie gestoppt Vernetzung.quelle
In meinem Fall hing der Upstart-Dienst von dem Skript ab, das sich im vagrant synchronisierten Ordner befindet . Behebung des Problems mit folgender Zeile:
Weitere Informationen: http://razius.com/articles/launching-services-after-vagrant-mount/
quelle
Ähnlich wie bei @xuhcc bin ich hierher gekommen, um herauszufinden, warum mein Vagrant Upstart-Skript nicht ausgeführt wurde. Folgendes soll funktionieren:
In einigen Builds aufgrund des folgenden Fehlers jedoch nicht.
https://github.com/mitchellh/vagrant/issues/6074
Die im Bericht aufgeführte Problemumgehung hat für mich hervorragend funktioniert:
Hat super für mich funktioniert
quelle
es hat bei mir funktioniert (ich muss nach iface up den Service starten):
quelle