I am using an init script to run a simple process, which is started with:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--exec $DAEMON $DAEMON_ARGS
The process called $DAEMON usually prints log information to its standard output. As far as I can tell this data is not being stored anywhere.
I would like to write or append the stdout of $DAEMON to a file somewhere.
The only solution I know is to tell start-stop-daemon to call a shellscript instead of $DAEMON directly; the script then calls $DAEMON and writes to the logfile. But that requires an extra script which, like modifying the daemon itself, seems the wrong way to solve such a common task.
Usually
start-stop-daemon
closes the standard file descriptors when running in the background. From the man page ofstart-stop-daemon
:This one worked for me:
You need to do:
Also if you use
--chuid
or--user
, make sure the user can write to/var/log
or the existing/var/log/some.log
. The best way is to have that user own a/var/log/subdir/
though.I'm not sure if "$DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1" will ever close the file descriptor for the log file... which means if your daemon runs forever, I'm not sure that logrotate or other mechanisms for cleaning up disk space would work. Since it's > instead of >>, the suggested command would also truncate existing logs on restart. If you want to see why the daemon crashed, and it restarts automatically, that might not be very helpful.
Another option might be "$DAEMON | logger". logger is a command that will log to syslog (/var/log/messages). If you need stderr too, I think you could use "$DAEMON 1>&2 | logger"
How about:
It seems you should be able to use now the
--no-close
parameter when startingstart-stop-daemon
to capture the daemon output. This new feature is available in thedpkg
package since version 1.16.5 on Debian:Quoting an old mailing list:
https://lists.ubuntu.com/archives/ubuntu-uk/2005-June/000037.html