Running 12.04, I have the following upstart job in ~/.init/
:
# myjob
start on net-device-up
stop on [!12345]
script
echo ">> hello from user script" >> ~/tmp/upstart.log
end script
After rebooting my machine
service myjob start
# => myjob: unrecognised service
initctl
does list the job, but running it without sudo throws an error:
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")
I would expect to be able to start the job using service
or initctl
without using sudo
. What have I misunderstood?
Thanks
Best Answer
A few points:
User jobs are not enabled by default in Ubuntu. See:
You never need to reboot after creating any type of Upstart job—they are automatically detected by Upstart (using inotify).
The
service
command is not part of Upstart—it is the SystemV tool to manipulate SysV jobs. However, Upstart provides SystemV compatibility such that Upstart system jobs can also be manipulated viaservice
(for convenience). The Upstart equivalent commands arestart
,stop
and,restart
.For user jobs, you must use
start
,stop
and,restart
(or theinitctl
equivalents).Finally, note that user jobs are very basic currently. We plan to enhance them significantly for 12.10 but for now be aware that:
/bin/sh -e
regardless of which shell you use by default. That-e
is also very important (man sh
for details).Upstart will only set a minimal set of variables in the user job environment. Hence, you should probably set variables like
HOME
like this:env HOME=/home/james
See: