duende - run a child process as a daemon
makes a given child process a daemon. The standard output and
standard error of the child process is logged via syslog() with a priority of
] child_process [ arguments passed onto child ]
is invoked, it spawns two processes. In addition to spawning
the daemonized child process, duende
also spawns a process which reads
and logs the standard output of the daemonized process. The parent process
stays alive so as to monitor the daemonized process.
requires a blank directory named /etc/maradns/logger to run.
Should the parent duende process a HUP signal, duende
will restart the
child process. Should the daemonized or logging process received an untrapped
HUP signal or exit with an exit code of 8, duende
will restart the
process. Should the daemonized or logging process exit for any other reason,
will send the logger process a TERM signal and exit. Should the
duende parent process receive a TERM or INT signal, duende
sends all of
its children TERM signals, then exits.
The duende process must be started as the superuser; this is because Duende's
intended child processes (maradns and zoneserver) need to bind to privileged
ports, and because duende uses a setuid() call to change the user ID of the
logging process to the user with ID 66.
Most of the above behaviour can be configured by command line arguments.
- -c|--chroot directory
- The log helper process will change its directory and root
to this location. This defaults to /etc/maradns/logger .
- -i|--ident string
- The log helper process will use this string to identify the
process when sending messages to syslog. This defaults to log-help
- -p|--pid filename
- If this argument is present, the duende parent process will
store its pid in this file.
- -u|--uid integer
- The log helper process will drop its user id to this. This
value defaults to 66.
- -g|--gid integer
- The log helper process will drop its group id to this. This
value defaults to 66.
- -r|--restart_on integer
- The log helper process will restart the child process if it
exists with this status code. This defaults to 8.
uses the syslog() facility to log the standard output of the
program that it invokes. The name of the program (in other words, the
"ident" given to openlog()) defaults to log-helper
but can be
overridden with the --ident argument. All messages created by the child
process are sent to syslog() with a priority of LOG_ALERT and a
"facility" of LOG_DAEMON (daemon.info in /etc/syslog.conf). Should
duende itself encounter an error, it will send messages to syslog() with a
priority of LOG_ALERT.
Also, the directory /etc/maradns/logger, while used by duende, is not used to
store any log messages. That is unless, for some reason, one configures syslog
to store messages there.
Using duende to start maradns, where the mararc file is /etc/mararc.2
Using duende to start zoneserver, where the mararc file is /etc/mararc.4
assumes that all of its children are well-behaved, eating their
vegetables, going to bed when told, and terminating when receiving a TERM
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Duende and this man page are written by Sam Trenholme. D Richard Felker III
provided some invaluable assistance with the piping code which duende