web-dev-qa-db-fra.com

Le travail parvenu utilisateur dans ~ / .init / est introuvable.

Sous 12.04, j'ai le travail suivant dans ~/.init/:

# myjob

start on net-device-up
stop on [!12345]

script

echo ">> hello from user script" >> ~/tmp/upstart.log

end script

Après avoir redémarré ma machine

service myjob start
# => myjob: unrecognised service

initctl répertorie le travail, mais son exécution sans Sudo génère une erreur:

initctl start myjob
# => initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.100" (uid=1000 pid=13349 comm="initctl start Thunderbird ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Je m'attendrais à pouvoir démarrer le travail en utilisant service ou initctl sans utiliser Sudo. Qu'est-ce que j'ai mal compris?

Merci

7
Dave Nolan

Quelques points:

  1. Les tâches utilisateur ne sont pas activées par défaut dans Ubuntu. Voir:

  2. Vous n'avez jamais besoin de redémarrer après avoir créé un type de travail Upstart: ils sont automatiquement détectés par Upstart (à l'aide de inotify).

  3. La commande service ne fait pas partie de Upstart. Il s'agit de l'outil SystemV permettant de manipuler les travaux SysV. Cependant, Upstart offre une compatibilité SystemV telle que les travaux système Upstart peuvent également être manipulés via service (pour plus de commodité). Les commandes équivalentes Upstart sont start, stop et, restart.

  4. Pour les travaux utilisateur, vous devez utiliser start, stop et, restart (ou les équivalents initctl).

Enfin, notez que les tâches des utilisateurs sont actuellement très basiques. Nous prévoyons de les améliorer considérablement pour 12h10, mais pour le moment, sachez que:

  • Upstart exécutera tous les travaux utilisateur en utilisant /bin/sh -e quel que soit le shell que vous utilisez par défaut. Ce -e est également très important (man sh pour plus de détails).
  • Upstart ne définira qu'un ensemble minimal de variables dans l'environnement de travail de l'utilisateur. Par conséquent, vous devriez probablement définir des variables comme HOME comme ceci:

    env HOME=/home/james

Voir:

12
jamesodhunt