Clarification on upstart-0.5 and dbus usage

Scott James Remnant scott at netsplit.com
Wed Jun 18 23:44:13 BST 2008


On Wed, 2008-06-18 at 15:21 -0700, Garrett Cooper wrote:

> Would the definition of "simple case" be a straight up SIGCHLD?
> 
If the process dies, Upstart will receive SIGCHLD, and if marked
"respawn" it will be restarted.

Detecting things like a stoned process is more interesting.

You'd want to do something like this on a regular interval:

 [via D-Bus] obtain job object from Upstart controller

	(if none, assume job has gone away and exit)

 [via D-Bus] obtain running instance object

	(if none, assume job is disabled and exit)

 [via D-Bus] obtain process id of main job

	(if you need it for your poking)
	(if none, assume Upstart is respawning job and sleep)

 do whatever you need to do to the process to determine whether it is
 alive or stoned

 if stoned, you can simply KILL the process knowing that Upstart will
 respawn it, or

 [via D-Bus] execute the Restart() method on the instance


This is actually where D-Bus really benefits.  Upstart's model is much
more complex and flexible than sysvinit's, so you need to be able to be
quite expressive across IPC.

There's already native D-Bus bindings in just about every language you
can care to think of, so that's a huge amount of coding you don't need
to do.

For example, that might look in Python:

	import dbus

	bus = dbus.SystemBus()
	upstart = bus.get_object("com.ubuntu.Upstart",
				 "/com/ubuntu/Upstart")

        try:
	    job = upstart.GetJobByName("my_job")
	    instance = upstart.GetInstanceByName("")
	except:
	    # No such job, or not running
	    return

	# Note this bit may change
	try:
	    pid = instance.Get("pid")["main"]
	except KeyError:
	    # Being started, stopped or restarted
	    return

	# Muck around with pid as you see fit
	if os.path.isfile("/tmp/%d" % pid):
	    return

	# Oh dear, it's broken
	instance.Restart()

Scott
-- 
Have you ever, ever felt like this?
Had strange things happen?  Are you going round the twist?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/upstart-devel/attachments/20080618/06164dbd/attachment.pgp 


More information about the upstart-devel mailing list