I\'d like a daemonizer that can turn an arbitrary, generic script or command into a daemon.
There are two common cases I\'d like to deal with:
I hav
I apologise for the long answer (please see comments about how my answer nails the spec). I'm trying to be comprehensive, so you have as good of a leg up as possible. :-)
If you are able to install programs (have root access), and are willing to do one-time legwork to set up your script for daemon execution (i.e., more involved than simply specifying the command-line arguments to run on the command line, but only needing to be done once per service), I have a way that's more robust.
It involves using daemontools. The rest of the post describes how to set up services using daemontools.
/service. The installer should have already done this, but just verify, or if installing manually. If you dislike this location, you can change it in your svscanboot script, although most daemontools users are used to using /service and will get confused if you don't use it.init (i.e., doesn't use /etc/inittab), you will need to use the pre-installed inittab as a base for arranging svscanboot to be called by init. It's not hard, but you need to know how to configure the init that your OS uses.
svscanboot is a script that calls svscan, which does the main work of looking for services; it's called from init so init will arrange to restart it if it dies for any reason./var/lib/svscan, but any new location will be fine.I usually use a script to set up the service directory, to save lots of manual repetitive work. e.g.,
sudo mkservice -d /var/lib/svscan/some-service-name -l -u user -L loguser "command line here"
where some-service-name is the name you want to give your service, user is the user to run that service as, and loguser is the user to run the logger as. (Logging is explained in just a little bit.)
svc.run script to ensure it's doing what you want it to. You may need to place a sleep call at the top, if you expect your service to exit frequently./service pointing to your service directory. (Don't put service directories directly within /service; it makes it harder to remove the service from svscan's watch.)mkservice); svscan takes care of sending log messages to the logging service.mkservice will create auto-rotated, timestamped log files in the log/main directory. The current log file is called current.svc -t /service/some-service-name; -t means "send SIGTERM".-h (SIGHUP), -a (SIGALRM), -1 (SIGUSR1), -2 (SIGUSR2), and -k (SIGKILL).-d. You can also prevent a service from automatically starting at bootup by creating a file named down in the service directory.-u. This is not necessary unless you've downed it previously (or set it up not to auto-start).-x; usually used with -d to terminate the service as well. This is the usual way to allow a service to be removed, but you have to unlink the service from /service first, or else svscan will restart the supervisor.
Also, if you created your service with a logging service (mkservice -l), remember to also exit the logging supervisor (e.g., svc -dx /var/lib/svscan/some-service-name/log) before removing the service directory.Pros:
init provides.Cons:
svc, and cannot run the run scripts directly (since they would then not be under the control of the supervisor).supervise processes in your process table.)In balance, I think daemontools is an excellent system for your needs. I welcome any questions about how to set it up and maintain it.