Запуск 12.04, у меня есть следующее задание upstart в ~/.init/
:
# myjob
start on net-device-up
stop on [!12345]
script
echo ">> hello from user script" >> ~/tmp/upstart.log
end script
После перезагрузки моей машины
service myjob start
# => myjob: unrecognised service
initctl
действительно перечисляет работу, но выполняет без sudo выдает ошибку:
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")
Я ожидаю, что смогу начать работу, используя service
или initctl
, не используя sudo
. Что я неправильно понял?
Спасибо
Несколько точек:
Пользовательские задания не включены по умолчанию в Ubuntu. См.:
Вы никогда не должны перезагружать после создания никакого типа Новомодного задания — они автоматически обнаруживаются Выскочкой (использующий inotify).
service
команда не является частью Выскочки — это - инструмент SystemV для управления заданиями SysV. Однако Выскочка обеспечивает совместимость SystemV, таким образом, что через Новомодные системные задания можно также управлять service
(для удобства). Выскочка эквивалентные команды start
, stop
и, restart
.
Для пользовательских заданий необходимо использовать start
, stop
и, restart
(или initctl
эквиваленты).
Наконец, обратите внимание, что пользовательские задания в настоящее время являются очень простыми. Мы планируем улучшить их значительно для 12,10, но на данный момент знать что:
/bin/sh -e
независимо от которой оболочки Вы используете по умолчанию. Это -e
также очень важно (man sh
для деталей).Выскочка только установит минимальный набор переменных в пользовательской среде задания. Следовательно, необходимо, вероятно, установить переменные как HOME
как это:
env HOME=/home/james
См.: