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
Quelques points:
Les tâches utilisateur ne sont pas activées par défaut dans Ubuntu. Voir:
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).
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
.
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:
/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: