Ausführen von Upstart-Benutzerjobs beim Start

8

Ich verwende Ubuntu Server 11.04. Ich habe einen Upstart-Benutzerjob wie hier beschrieben erstellt .

Ich habe die folgende Datei bei mir /home/myuser/.init/sensors.conf:

start on started mysql
stop on stopping mysql


chdir /home/myuser/mydir/project
exec /home/myuser/mydir/env/bin/python /home/myuser/mydir/project/manage.py sensors

respawn

respawn limit 10 90

Da myuserich den Job gut starten, stoppen und neu laden kann, funktioniert er einwandfrei:

$ start sensors
sensors start/running, process 1332
$ stop sensors
sensors stop/waiting

Das Problem ist, dass der Job beim Start beim mysqlStart nicht automatisch gestartet wird . Nach einem Neustart mysqlläuft, aber mein sensorsJob ist nicht.

Was seltsam ist, ist, dass der Job zwar nicht beim Booten beginnt, aber sudobeim Neustart mysqltatsächlich meinen Job startet. Die folgenden Befehle werden myuserab einem Neustart ausgeführt:

$ status sensors
sensors stop/waiting
$ sudo restart mysql
mysql start/running, process 1209
$ status sensors
sensors start/running, process 1229

Die Dokumentation für Upstart-Benutzerjobs ist ziemlich begrenzt. Was ist die richtige Technik, um einen Benutzerjob beim Start des Systems automatisch zu starten?

Ich weiß, dass ich einfach etwas hineinwerfen kann rc.local, um es zu starten, oder ich könnte es verschieben sensors.conf, /etc/initaber ich bin gespannt, ob es eine Möglichkeit gibt, dies nur mit Upstart zu tun.

dgel
quelle

Antworten:

8

Das Problem ist, dass Benutzerjobs erst in Upstart geladen werden, wenn der Benutzer eine Upstart-Sitzung erstellt, indem er einen der initctlBefehle ausführt.

Ich habe es unter http://bradleyayers.blogspot.com.au/2012/04/enabling-upstart-user-jobs-to-start-at.html ausführlicher beschrieben und auch einen Upstart-Job geschrieben, der das Problem umgeht Problem.

bradley.ayers
quelle
Es gibt eine andere Möglichkeit, dies unter upstart.ubuntu.com/cookbook/… zu tun. Es gibt jedoch einen Fehler. Sie müssen "start session_init" in "start session-init" ändern.
Natevw
-1

Wenn Sie sich Quellen wie /etc/init/mysql.confund http://upstart.ubuntu.com/cookbook/#start-on ansehen , sollten Sie Ihre start onZeile in etwa so ändern :

start on (mysql and runlevel [2345])

Ich bin mir nicht sicher, ob ich damit einverstanden bin, dass dem Emporkömmling die Dokumentation fehlt, aber es fällt mir manchmal schwer, die Dokumente zu verstehen. Normalerweise mache ich nur Versuch und Irrtum, bis es funktioniert. Die obige Lösung kann tatsächlich übertrieben sein ... etwas so Einfaches wie dies kann ausreichen:

start on mysql
Carl Zulauf
quelle
Es ist nicht so, dass Upstart im Allgemeinen keine Dokumentation enthält, sondern dass es nicht viel Dokumentation zu Benutzerjobs gibt - Jobs, die in /home/$USER/.init platziert sind (keine Jobs, die in / etc / init platziert wurden).
dgel
Ich habe Ihre Vorschläge ausprobiert, aber keinen Unterschied. Es ist kein Problem mit meiner start onLeitung, aber es ist nur die Tatsache, dass Upstart nur / etc / init beim Start lädt, aber keine Benutzer-Init-Dateien in ihrem$HOME/.init
dgel
Entschuldigung, ich habe verpasst, dass dies ein Benutzerjob war und kein Job in /etc/init. Sie haben Recht, dass dafür anscheinend keine Dokumentation vorhanden ist, und ich bin mir nicht sicher, wie ich sicherstellen soll, dass ~/.initSkripte gestartet werden.
Carl Zulauf
Die Dokumente, die ich finden konnte, weisen darauf hin, dass die $HOME/.initJobs nicht standardmäßig aktiviert sind und /etc/dbus-1/system.d/Upstart.confmöglicherweise einige Änderungen erforderlich sind. upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user
Carl Zulauf