Recently, I exprienced a problem with the process tracking in Upstart:
I wanted start a daemon process running as a specific user. However, I needed root privileges in the
pre-start script, so I could not use the
setgid options. I tried to use
su in the exec option, but then Upstart would not track the right process. The
expect fork and
expect daemon options did not help either. As a nasty side effect, these options cannot be tested easily, because having the wrong option will lead to Upstart waiting for an already dead process to die and there is no way to reset the status in Upstart. At least, there is a workaround for effectively resetting the status without restarting the whole computer.
The problem is that
su forks when running the command it is asked to run instead of calling
exec from the main process. Unfortunately, The process I had to run would fork again because I had to run it as a daemon (not running it as a daemon had some undesirable side effects). Finally, I found the solution: Instead of using
start-stop-daemon can be used. This tool will not fork and therefore it will not upset Upstart's process tracking. For example, the line
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmdwill run /bin/server_cmd as daemonuser without forking.
expect fork or
expect daemon can be used, just depending on the fork behavior of the final process.