#!/bin/bash # SPDX-License-Identifier: LGPL-2.1-only # # Start/Stop the CGroups Rules Engine Daemon # # Copyright Red Hat Inc. 2008 # # Authors: Steve Olivieri # # cgred CGroups Rules Engine Daemon # chkconfig: - 14 86 # description: This is a daemon for automatically classifying processes \ # into cgroups based on UID/GID. # # processname: cgrulesengd # pidfile: /var/run/cgred.pid # ### BEGIN INIT INFO # Provides: cgrulesengd # Required-Start: $local_fs $syslog $cgconfig # Required-Stop: $local_fs $syslog # Should-Start: # Should-Stop: # Short-Description: start and stop the cgroups rules engine daemon # Description: CGroup Rules Engine is a tool for automatically using \ # cgroups to classify processes ### END INIT INFO CGRED_BIN=/usr/sbin/cgrulesengd # Sanity checks [[ -x $CGRED_BIN ]] || exit 1 # # Source LSB routines # SYSLIBFILE=/lib/lsb/init-functions OLDSYSLIBFILE=/etc/init.d/functions if [[ -x $SYSLIBFILE ]] ; then # shellcheck disable=SC1090 source $SYSLIBFILE elif [[ -x $OLDSYSLIBFILE ]] ; then # shellcheck disable=SC1090 source $OLDSYSLIBFILE log_warning_msg() ( warning "$@" ; printf "\n" 1>&2 ; ) log_failure_msg() ( failure "$@" ; printf "\n" 1>&2 ; ) log_success_msg() ( success "$@" ; printf "\n" 1>&2 ; ) else log_warning_msg() ( printf "warning:%s\n" "$@" 1>&2 ;) log_failure_msg() ( printf "failure:%s\n" "$@" 1>&2 ;) log_success_msg() ( printf "success:%s\n" "$@" 1>&2 ;) fi # Read in configuration options. if [[ -f "/etc/sysconfig/cgred.conf" ]] ; then # shellcheck disable=SC1091 source /etc/sysconfig/cgred.conf OPTIONS="$NODAEMON $LOG" if [[ -n "$LOG_FILE" ]]; then OPTIONS="$OPTIONS --logfile=$LOG_FILE" fi if [[ -n "$SOCKET_USER" ]]; then OPTIONS="$OPTIONS -u $SOCKET_USER" fi if [[ -n "$SOCKET_GROUP" ]]; then OPTIONS="$OPTIONS -g $SOCKET_GROUP" fi else OPTIONS="" fi # For convenience processname=cgrulesengd servicename=cgred lockfile="/var/lock/subsys/$servicename" pidfile=/var/run/cgred.pid start() { echo -n $"Starting CGroup Rules Engine Daemon: " if [[ -f "$lockfile" ]]; then log_failure_msg "$servicename is already running with PID $(cat ${pidfile})" return 0 fi num=$(grep "cgroup" /proc/mounts | awk '$3=="cgroup"' | wc -l) if [[ "$num" -eq 0 ]]; then echo log_failure_msg $"Cannot find cgroups, is cgconfig service running?" return 1 fi daemon --check $servicename --pidfile $pidfile $CGRED_BIN $OPTIONS retval=$? echo if [[ $retval -ne 0 ]]; then return 7 fi if ! touch "$lockfile"; then return 1 fi pidof "$processname" > $pidfile return 0 } stop() { echo -n $"Stopping CGroup Rules Engine Daemon..." if [[ ! -f $pidfile ]]; then log_success_msg return 0 fi killproc -p $pidfile -TERM "$processname" retval=$? echo if [[ $retval -ne 0 ]]; then return 1 fi rm -f "$lockfile" "$pidfile" return 0 } RETVAL=0 # See how we are called case "$1" in start) start RETVAL=$? ;; stop) stop RETVAL=$? ;; status) status -p $pidfile $servicename RETVAL=$? ;; restart) stop start RETVAL=$? ;; condrestart) if [[ -f "$lockfile" ]]; then stop start RETVAL=$? fi ;; reload|flash) if [[ -f "$lockfile" ]]; then echo $"Reloading rules configuration..." kill -s 12 "$(cat ${pidfile})" RETVAL=$? if [[ $RETVAL -eq 0 ]] ; then log_success_msg "" else log_failure_msg "" fi else log_failure_msg "$servicename is not running." fi ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}" RETVAL=2 ;; esac exit $RETVAL