Files
webgui/etc/rc.d/rc.cgconfig
2025-04-22 08:55:36 -07:00

222 lines
5.3 KiB
Bash

#!/bin/bash
# SPDX-License-Identifier: LGPL-2.1-only
#
# Start/Stop the workload manager
#
# Copyright IBM Corporation. 2008
#
# Authors: Balbir Singh <balbir@linux.vnet.ibm.com>
#
# cgconfig Control Groups Configuration Startup
# chkconfig: - 5 95
# description: This script runs the cgconfigparser utility to parse and setup
# the control group filesystem. It uses /etc/cgconfig.conf
# and parses the configuration specified in there.
### BEGIN INIT INFO
# Provides: cgconfig
# Required-Start:
# Required-Stop:
# Should-Start: ypbind
# Should-Stop: ypbind
# Short-Description: Create and setup control group filesystem(s)
# Description: Create and setup control group filesystem(s)
### END INIT INFO
# get correct location of binaries from configure
sbindir=/usr/sbin
CGCONFIGPARSER_BIN=$sbindir/cgconfigparser
CONFIG_FILE=/etc/cgconfig.conf
CONFIG_DIR=/etc/cgconfig.d
servicename=cgconfig
lockfile=/run/lock/subsys/$servicename
#
# 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 the config
CREATE_DEFAULT=yes
if [ -e /etc/sysconfig/cgconfig ]; then
# shellcheck disable=SC1091
source /etc/sysconfig/cgconfig
fi
lockfiledir=$(dirname "$lockfile")
create_default_groups() {
defaultcgroup=
if [ -f /etc/cgrules.conf ]; then
# shellcheck disable=SC2034
read -r user ctrl defaultcgroup <<< \
"$(grep -m1 '^\*[[:space:]]\+' /etc/cgrules.conf)"
if [[ ( -n "$defaultcgroup" ) && ( "$defaultcgroup" = "*" ) ]]; then
log_warning_msg "/etc/cgrules.conf incorrect"
log_warning_msg "Overriding it"
defaultcgroup=
fi
fi
if [[ -z "$defaultcgroup" ]]
then
defaultcgroup=sysdefault/
fi
#
# Find all mounted subsystems and create comma-separated list
# of controllers.
#
controllers=$(lssubsys 2>/dev/null | tr '\n' ',' | sed s/.$//)
#
# Create the default group, ignore errors when the default group
# already exists.
#
cgcreate -f 664 -d 775 -g "$controllers":"$defaultcgroup" 2>/dev/null
#
# special rule for cpusets
#
if echo "$controllers" | grep -q -w cpuset; then
cpus=$(cgget -nv -r cpuset.cpus /)
cgset -r cpuset.cpus="$cpus $defaultcgroup"
mems=$(cgget -nv -r cpuset.mems /)
cgset -r cpuset.mems="$mems $defaultcgroup"
fi
#
# Classify everything to default cgroup. Ignore errors, some processes
# may exit after ps is run and before cgclassify moves them.
#
cgclassify -g "$controllers:$defaultcgroup $(ps --no-headers -eL o tid)" \
2>/dev/null || :
}
start() {
printf "Starting %s service: " "$servicename"
if [[ -f "$lockfile" ]]; then
log_warning_msg "lock file already exists"
return 0
fi
if [[ ! -s "$CONFIG_FILE" ]]; then
log_failure_msg $CONFIG_FILE "is not configured"
return 6
fi
if ! "$CGCONFIGPARSER_BIN" -l "$CONFIG_FILE" -L "$CONFIG_DIR"
then
log_failure_msg "Failed to parse " "$CONFIG_FILE" "or" "$CONFIG_DIR"'/*'
return 1
fi
if [ $CREATE_DEFAULT = "yes" ]; then
create_default_groups
fi
if ! mkdir -p "$lockfiledir" ; then
log_failure_msg "Failed to mkdir $lockfiledir directory"
return 1
fi
if ! touch "$lockfile" ; then
log_failure_msg "Failed to touch $lockfile"
return 1
fi
log_success_msg "Started $servicename"
return 0
}
stop() {
printf "Stopping %s service is not supported!: " "$servicename"
log_failure_msg "Failed to stop $servicename"
return 1
}
trapped() {
#
# Do nothing
#
true
}
usage() {
echo "$0 <start|stop|restart|condrestart|status>"
exit 2
}
common() {
#
# main script work done here
#
trap "trapped ABRT" ABRT
trap "trapped QUIT" QUIT
trap "trapped TERM" TERM
trap "trapped INT" INT
}
restart() {
common
stop
start
}
RETVAL=0
case $1 in
'stop')
common
stop
RETVAL=$?
;;
'start')
common
start
RETVAL=$?
;;
'restart'|'reload')
restart
RETVAL=$?
;;
'condrestart')
if [[ -f "$lockfile" ]]; then
restart
RETVAL=$?
fi
;;
'status')
if [ -f "$lockfile" ]; then
echo "Running"
exit 0
else
echo "Stopped"
exit 3
fi
;;
*)
usage
;;
esac
exit $RETVAL