Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/raforg/daemon
turns other processes into daemons
https://github.com/raforg/daemon
bsd c cli daemon daemonize debian freebsd linux macos macosx netbsd openbsd posix redhat svr4 ubuntu unix
Last synced: 3 days ago
JSON representation
turns other processes into daemons
- Host: GitHub
- URL: https://github.com/raforg/daemon
- Owner: raforg
- License: gpl-2.0
- Created: 2020-11-11T13:46:55.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-08-24T12:57:19.000Z (about 1 year ago)
- Last Synced: 2024-07-30T19:45:00.130Z (4 months ago)
- Topics: bsd, c, cli, daemon, daemonize, debian, freebsd, linux, macos, macosx, netbsd, openbsd, posix, redhat, svr4, ubuntu, unix
- Language: C
- Homepage: http://libslack.org/daemon/
- Size: 1.38 MB
- Stars: 13
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: COPYING
Awesome Lists containing this project
README
README
======
*daemon* - turns other processes into daemonsDESCRIPTION
===========
*Daemon* turns other processes into daemons. There are many tasks that need to
be performed to correctly set up a daemon process. This can be tedious.
*Daemon* performs these tasks for other processes. This is useful for writing
daemons in languages other than *C*, *C++* or *Perl* (e.g. `/bin/sh`, *Java*).If you want to write daemons in languages that can link against *C* functions
(e.g. *C*, *C++*), see *libslack* which contains the core functionality of *daemon*.DETAILS
=======
*Daemon* turns other processes into daemons. There are many tasks that need to
be performed to correctly set up a daemon process. This can be tedious.
*Daemon* performs these tasks for other processes.The preparatory tasks that *daemon* performs for other processes are:
First revoke any setuid or setgid privileges that *daemon* may have been
installed with (by system administrators who laugh in the face of danger).Process command line options.
Change the root directory if the `--chroot` option was supplied.
Change the process `uid` and `gid` if the `--user` option was supplied. Only
*root* can use this option. Note that the `uid` of *daemon* itself is changed,
rather than just changing the `uid` of the client process.Read the system configuration file(s) (`/etc/daemon.conf` and
`/etc/daemon.conf.d/*` by default, or specified by the `--config` option)
unless the `--noconfig` option was supplied. Then read the user's personal
configuration file(s) (`~/.daemonrc` and `~/.daemonrc.d/*`), if any. Note:
The root directory and the user must be set before access to the
configuration file(s) can be attempted so neither `--chroot` nor `--user`
options may appear in the configuration file.On *BSD* systems (except *macOS*), the system configuration file(s) are
`/usr/local/etc/daemon.conf` and `/usr/local/etc/daemon.conf.d/*` by
default.On *macOS*, when installed via *macports*, the system configuration file(s)
are `/opt/local/etc/daemon.conf` and `/opt/local/etc/daemon.conf.d/*`.Disable core file generation to prevent leaking potentially sensitive
information in daemons that are run by *root* (unless the `--core` option
was supplied).Become a daemon process:
* If *daemon* was not invoked by *init(8)* (i.e. pid 1) or *inetd(8)*:
* Ignore `SIGHUP` signals in case the current process session leader
terminates while attached to a controlling terminal, causing us to
receive a `SIGHUP` signal before we start our own process session below.
This can happen when *daemon* was invoked interactively via the shell
builtin `exec`. When this initial process terminates below, the terminal
emulator that invoked the shell also terminates, so *daemon* needs to
protect itself from that.* Background the process to lose process group leadership.
* Start a new process session.
* Background the process again to lose process session leadership. Under
*SVR4* this prevents the process from ever gaining a controlling
terminal. This is only necessary under *SVR4*, but is always done for
simplicity. Note that ignoring `SIGHUP` signals earlier means that
when the newly created process session leader terminates, then even if
it has a controlling terminal open, the newly backgrounded process
won't receive the corresponding `SIGHUP` signal that is sent to all
processes in the process session's foreground process group, because
it inherited signal dispositions from the initial process.* Change the current directory to the root directory so as not to hamper
umounts.* Clear the *umask* to enable explicit file creation modes.
* Close all open file descriptors. If *daemon* was invoked by *inetd(8)*,
`stdin`, `stdout` and `stderr` are left open, because they are open to a
socket.* Open `stdin`, `stdout` and `stderr` to `/dev/null`, in case something
requires them to be open. Of course, this is not done if *daemon* was
invoked by *inetd(8)*.* If the `--name` option was supplied, create and lock a file containing the
process id of the *daemon* process. The presence of this locked file
prevents two instances of a daemon with the same name from running at
the same time. The default location of the pidfile is `/var/run` for
*root* (`/etc` on *Solaris*, `/opt/local/var/run` on *macOS* when
installed via *macports*), and `/tmp` for normal users. If the
`--pidfiles` option was supplied, its argument specifies the directory
in which the pidfile will be placed. If the `--pidfile` option was
supplied, its argument specifies the name of the pidfile and the
directory in which it will be placed.If the `--umask` option was supplied, set the *umask* to its argument, which
must be a valid three-digit octal mode. Otherwise, set the *umask* to `022`,
to prevent accidentally creating group- or world-writable files.Set the current directory if the `--chdir` option was supplied.
Spawn the client command and wait for it to terminate. The client command
can be specified as command line arguments, or as the argument of the
`--command` option. If both the `--command` option and command line
arguments are present, the client command is the result of appending the
command line arguments to the argument of the `--command` option.If the `--output`, `--stdout` and/or `--stderr` option were supplied, the client's
standard output and/or standard error are captured by *daemon*, and sent to the
respective *syslog* destinations.When the client terminates, *daemon* respawns it if the `--respawn` option
was supplied. If the client ran for less than `300` seconds (or the value of
the `--acceptable` option), then *daemon* sees this as a failure. It will
attempt to restart the client up to five times (or the value of the
`--attempts` option), before waiting for `300` seconds (or the value of the
`--delay` option). This gives the system administrator the chance to correct
whatever is preventing the client from running successfully without
overloading system resources. If the `--limit` option was supplied, *daemon*
terminates after the specified number of respawn attempt bursts. The default
is zero, which means never give up, never surrender.When the client terminates, and the `--respawn` option wasn't supplied,
*daemon* terminates as well.If the `--foreground` option was supplied, the client process is run as a
foreground process, and is not turned into a daemon at all. If *daemon* is
connected to a terminal, then the client process will also be connected to
it. If *daemon* is not connected to a terminal, but the client needs to be
connected to a terminal, use the `--pty` option.If the `--bind` option was supplied, on systems with *systemd-logind* or
*elogind*, the client process will be terminated when the user logs out.The `--stop` option sends a `SIGTERM` signal to a currently running named
*daemon*, which causes it to terminate its client process (with a `SIGTERM`
signal), and to then terminate itself.The `--restart` option sends a `SIGUSR1` signal to a currently running named
*daemon*, which causes it to terminate its client process (with a `SIGTERM`
signal). If the named *daemon* was started with the `--respawn` option, it
will then restart the client. Otherwise, it will terminate itself.The `--signal` option sends a user-specified signal directly to a currently
running named *daemon*'s client process.The `--running` option reports whether or not a given named *daemon* process
is currently running.The `--list` option reports all the currently running named *daemon* processes.
--------------------------------------------------------------------------------
URL: https://libslack.org/daemon
URL: https://raf.org/daemon
GIT: https://github.com/raforg/daemon
GIT: https://codeberg.org/raforg/daemon
Date: 20230824
Author: raf