Chain loading cheatsheet

run scripts conventionally use simple tools, that chain load from one tool to the next, to set up a dæmon's process state. There is quite a large toolset available for this. These are just some of most widely used chain loading commands.

For exposition, each command here omits the trailing argument vector, which is the rest of the commands to chain to. That is determined by the script as a whole. In a script interpreted by nosh or Laurent Bercot's execlineb, one could (for readability) place these commands on individual lines. In a POSIX-conformant shell script, these would have to be all on a single logical line (possibly comprising multiple physical lines joined by backslashed newlines).

setuidgid myservice-d

Drop privileges and operate henceforth under the aegis of user account myservice-d, the (dedicated) user account for this service.

envuidgid myservice-d

Set up the environment with the ID information of user account myservice-d, the (dedicated) user account for this service.

setuidgid-fromenv

Drop privileges and operate henceforth under the aegis of the user account whose ID information is given in the environment.

chdir dir

Change process working directory to dir.

envdir env/

Process the environment directory env/. An environment directory with this this name, specifically, is compatible with the get and set commands to rcctl.

softlimit -o 2048

Adjust the soft limit on the number of open file descriptors (in each dæmon process of the service) to 2048.

fdredir -r 0 seed

Redirect standard input to read from an existing file named seed.

jexec wibble

Switch to running in (BSD) jail wibble, which (presumably) another service is maintaining with the jail command.

rtprio 1

Run with (BSD) realtime scheduling policy at priority 1.

chrt --batch 1

Run with (Linux) SCHED_BATCH scheduling policy at priority 1.

tcp-socket-listen --backlog 2 --combine4and6 "::0" smtp

Listen, with a backlog of two pending connections, to the SMTP Relay port on all IPv6 and (if the system supports it) IPv4 addresses. The chained-to program receives the listening socket file descriptor at a well-known, fixed, position. If it needs the systemd convention for this, use the --systemd-compatibility option.

tcp-socket-accept --connection-limit 16

Accept connections on a pre-supplied listening socket, limiting the number of concurrent active accepted connection service processes to 16. Multiple chained-to programs are forked, here. The convention is to use another script, such as ./service, for the chained-to program. This permits adjustment of the service command on the fly, without need for stopping and restarting the service itself.

ucspi-socket-rules-check

Apply a UCSPI-TCP/UCSPI-UNIX access control ruleset.

line-banner 'Hello there!'

Print Hello there! to standard output. Some server programs, such as Bernstein's publicfile FTP server, expect their initial greetings message to be written out for them.

read-conf --oknofile /etc/defaults/wibble

Read the environment configuration file /etc/defaults/wibble, without aborting if it does not exist. Such files are a compatibility measure for setups that used to use such configuration files with System 5 rc. They are less preferable to daemontools-like environment directories; and such configuration mechanisms are gradually falling into desuetude anyway. However, this tool is also useful outwith dæmon run scripts.