#!/bin/sh PROGRAM="sysctl" SYSCTL_ARGS="" # shellcheck source=/dev/null [ -r "/etc/default/$PROGRAM" ] && . "/etc/default/$PROGRAM" # Files are read from directories in the SYSCTL_SOURCES list, in the given # order. A file may be used more than once, since there can be multiple # symlinks to it. No attempt is made to prevent this. SYSCTL_SOURCES="/etc/sysctl.d/ /usr/local/lib/sysctl.d/ /usr/lib/sysctl.d/ /lib/sysctl.d/ /etc/sysctl.conf" # The "--system" option activates "--ignore", which is bad because invalid # variable settings in the configuration files will not be reported on the # system log. Use some scripting to mimic the --system behavior but still # reporting errors. Users not interested on error report can put "-e" in # SYSCTL_ARGS. # # The file redirections do the following: # # - stdout is redirected to syslog with facility.level "kern.info" # - stderr is redirected to syslog with facility.level "kern.err" # - file dscriptor 4 is used to pass the result to the "start" function. # run_program() { # shellcheck disable=SC2086 # we need the word splitting find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \ xargs -0 -r -n 1 readlink -f | { prog_status="OK" while :; do read -r file if [ -z "$file" ]; then echo "$prog_status" >&4 break fi echo "* Applying $file ..." /sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL" done 2>&1 >&3 | /usr/bin/logger -t sysctl -p kern.err } 3>&1 | /usr/bin/logger -t sysctl -p kern.info } start() { printf '%s %s: ' "$1" "$PROGRAM" status=$(run_program 4>&1) echo "$status" if [ "$status" = "OK" ]; then return 0 fi return 1 } case "$1" in start) start "Running";; restart|reload) start "Rerunning";; stop) :;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac