12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/bin/sh
- #
- # This script is used by busybox and procps-ng.
- #
- # With procps-ng, the "--system" option of sysctl also enables "--ignore", so
- # errors are not reported via syslog. Use the run_logger function to mimic the
- # --system behavior, still reporting errors via syslog. Users not interested
- # on error reports can add "-e" to SYSCTL_ARGS.
- #
- # busybox does not have a "--system" option neither reports errors via syslog,
- # so the scripting provides a consistent behavior between the implementations.
- # Testing the busybox sysctl exit code is fruitless, as at the moment, since
- # its exit status is zero even if errors happen. Hopefully this will be fixed
- # in a future busybox version.
- 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"
- # If the logger utility is available all messages are sent to syslog, except
- # for the final status. 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_logger() {
- # 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 || {
- echo "$prog_status" >&4
- break
- }
- echo "* Applying $file ..."
- /sbin/sysctl $SYSCTL_ARGS -p "$file" || 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
- }
- # If logger is not available all messages are sent to stdout/stderr.
- run_std() {
- # 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 || {
- echo "$prog_status" >&4
- break
- }
- echo "* Applying $file ..."
- /sbin/sysctl $SYSCTL_ARGS -p "$file" || prog_status="FAIL"
- done
- }
- }
- if [ -x /usr/bin/logger ]; then
- run_program="run_logger"
- else
- run_program="run_std"
- fi
- 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
|