Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How do you determine if an upstart job is running inside of a Bash script? That is I need a "boolean" value to do something like:

if [ determine_if_job_x_is_running ]; then
  echo "I see upstart job X is running, please stop it before ..."
share|improve this question

Create your own Bash function and put this in your ~/.bashrc:

    status $1 | grep -q "^$1 start" > /dev/null
    return $?

I really dislike the way of parsing output, but I don't see another obvious way. And in this case the output of <service name> start is very reliable as it's specified in the Upstart documentation.

Now you can use it like this:

if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
share|improve this answer
You might want to amend this to status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null just to make sure it's silent. – David G Aug 4 '15 at 20:23

Normally you use a PID file but you can also use pgrep to check your processes. Assume your service is called jobX this will work:

if [ $(pgrep jobX) ]; then

Or even better

if pgrep jobX > /dev/null 2>&1
share|improve this answer

You would use DBUS to query the status of that particular service.

$ job=myjob
$ dbus-send --system --print-reply --dest=com.ubuntu.Upstart /com/ubuntu/Upstart/jobs/${job}/_ org.freedesktop.DBus.Properties.GetAll string:''

Note that if you're writing your own upstart job, you should use upstart events or package dependencies instead.

share|improve this answer
Seems like this would just print some sort of text status that you would then have to parse to get a boolean value, right? – laslowh Feb 4 '13 at 19:04

Based on String contains in bash:

job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
    # do whatever you need
    # do whatever you need

My first impulse was to use variation of code ImaginaryRobots provided

dbus-send --system --print-reply --dest=com.ubuntu.Upstart \
  /com/ubuntu/Upstart/jobs/${job}/_ \
  org.freedesktop.DBus.Properties.Get string:'' string:state

which would return something like

method return sender=:1.0 -> dest=:1.94 reply_serial=2 variant string "running"

and use the solution above to check if the returned string contains "running". However case that job is not running dbus call will exit with status 1 instead returning "waiting" as I was expecting.

status ${job} would never exit with status 1 except in the case when there is no such job.

share|improve this answer

Your Answer


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.