How can I log the stdout of a process started by start-stop-daemon?
It seems you should be able to use now the --no-close
parameter when starting start-stop-daemon
to capture the daemon output. This new feature is available in the dpkg
package since version 1.16.5 on Debian:
Add new --no-close option to disable closing fds on --background.
This enabled the caller to see process messages for debugging purposes, or to be able to redirect file descriptors to log files, syslog or similar.
You need to do:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--exec /bin/bash -- -c "$DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1"
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.
To expand on ypocat's answer, since it won't let me comment:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1"
Using exec
to run the daemon allows stop to correctly stop the child process instead of just the bash parent.
Using --startas
instead of --exec
ensures that the process will be correctly detected by its pid and won't erroneously start multiple instances of the daemon if start is called multiple times. Otherwise, start-stop-daemon will look for a /bin/bash process and ignore the actual child process running the daemon.