Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am running Ubuntu server 11.04. I have created an Upstart user job as described here.

I have the following file at my /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

As myuser I can start, stop, and reload the job fine- it works perfectly:

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

The problem is that the job is not starting automatically at boot when mysql starts. After a fresh boot, mysql is running but my sensors job is not.

What's strange, is that although the job doesn't begin on bootup, if I use sudo to restart mysql it does indeed start my job. The following commands are run as myuser from a fresh startup:

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

The documentation for Upstart user jobs is pretty limited. What is the correct technique to have a user job start automatically on startup of the system?

I know I can just throw something in rc.local to start it, or I could move my sensors.conf to /etc/init but I'm curious if there is a way to do it using just Upstart.

share|improve this question

2 Answers 2

up vote 4 down vote accepted

The problem is that user jobs aren't loaded into Upstart until the user creates an Upstart session by running one of the initctl commands.

I've described it in more detail at http://bradleyayers.blogspot.com.au/2012/04/enabling-upstart-user-jobs-to-start-at.html and also written an Upstart job that works around the problem.

share|improve this answer

Looking at sources like /etc/init/mysql.conf and http://upstart.ubuntu.com/cookbook/#start-on it seems to me you should change your start on line to something like this:

start on (mysql and runlevel [2345])

I'm not sure I agree that upstart lacks documentation, but I sure do have a tough time understanding the docs sometimes. I usually just do trial and error until its working. The solution above may be overkill actually... something as simple as this may be sufficient:

start on mysql
share|improve this answer
    
It's not that upstart lacks documentation in general, it's that it doesn't have much documentation regarding user jobs- jobs placed in /home/$USER/.init (not jobs placed in /etc/init). –  dgel Nov 24 '11 at 0:10
    
I tried your suggestions but no difference. It's not a problem with my start on line, but it's just the fact that upstart only loads /etc/init on startup, but not user init files in their $HOME/.init –  dgel Nov 24 '11 at 0:12
    
Sorry, missed that this was a user job and not a job in /etc/init. You are correct that documentation appears to be lacking for that and I'm not sure how to ensure ~/.init scripts are started. –  Carl Zulauf Nov 24 '11 at 0:44
    
The docs I could find indicate the $HOME/.init jobs are not enabled by default and some changes to /etc/dbus-1/system.d/Upstart.conf might be required. upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user –  Carl Zulauf Nov 24 '11 at 1:07

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.