Exécution des tâches utilisateur Upstart au démarrage

8

J'utilise le serveur Ubuntu 11.04. J'ai créé un travail utilisateur Upstart comme décrit ici .

J'ai le fichier suivant chez moi /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

Comme myuserje peux démarrer, arrêter et recharger le travail correctement, cela fonctionne parfaitement:

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

Le problème est que le travail ne démarre pas automatiquement au démarrage au démarrage mysql. Après un nouveau démarrage, mysqlfonctionne mais mon sensorstravail ne l'est pas.

Ce qui est étrange, c'est que même si le travail ne démarre pas au démarrage, si je le sudoredémarre, mysqlil démarre effectivement mon travail. Les commandes suivantes sont exécutées à myuserpartir d'un nouveau démarrage:

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

La documentation des travaux utilisateur Upstart est assez limitée. Quelle est la bonne technique pour démarrer automatiquement un travail utilisateur au démarrage du système?

Je sais que je peux jeter quelque chose dans rc.localpour commencer, ou je pouvais bouger mon sensors.confà /etc/initmais je suis curieux de savoir s'il y a un moyen de le faire en utilisant simplement Upstart.

dgel
la source

Réponses:

8

Le problème est que les travaux utilisateur ne sont pas chargés dans Upstart jusqu'à ce que l'utilisateur crée une session Upstart en exécutant l'une des initctlcommandes.

Je l'ai décrit plus en détail sur http://bradleyayers.blogspot.com.au/2012/04/enabling-upstart-user-jobs-to-start-at.html et j'ai également écrit un travail Upstart qui fonctionne autour du problème.

bradley.ayers
la source
Il existe une autre façon de le faire documentée sur upstart.ubuntu.com/cookbook/… - il y a cependant un bogue, vous devrez changer "start session_init" en "start session-init".
natevw
-1

En regardant des sources comme /etc/init/mysql.confet http://upstart.ubuntu.com/cookbook/#start-on, il me semble que vous devriez changer votre start onligne en quelque chose comme ceci:

start on (mysql and runlevel [2345])

Je ne suis pas sûr d'être d'accord sur le fait que le débutant manque de documentation, mais j'ai du mal à comprendre les documents parfois. Je fais généralement des essais et des erreurs jusqu'à ce que cela fonctionne. La solution ci-dessus peut être exagérée en fait ... quelque chose d'aussi simple que cela peut être suffisant:

start on mysql
Carl Zulauf
la source
Ce n'est pas que le débutant manque de documentation en général, c'est qu'il n'a pas beaucoup de documentation concernant les jobs utilisateur - jobs placés dans /home/$USER/.init (pas les jobs placés dans / etc / init).
dgel
J'ai essayé vos suggestions mais aucune différence. Ce n'est pas un problème avec ma start onligne, mais c'est juste le fait que upstart ne charge que / etc / init au démarrage, mais pas les fichiers init de l'utilisateur dans leur$HOME/.init
dgel
Désolé, nous avons manqué qu'il s'agissait d'un travail utilisateur et non d'un travail dans /etc/init. Vous avez raison, la documentation semble manquer pour cela et je ne sais pas comment vous assurer que les ~/.initscripts sont démarrés.
Carl Zulauf
Les documents que j'ai pu trouver indiquent que les $HOME/.inittravaux ne sont pas activés par défaut et que certaines modifications /etc/dbus-1/system.d/Upstart.confpeuvent être nécessaires. upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user
Carl Zulauf