mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
The icgroupd contains a simple shell script daemon and an procd enabled init script for configuring cgroups according to uci configuration and launching the daemon. The daemon will periodically look for new processes in the root cgroup and move them to sub-groups according to configuration.
93 lines
1.8 KiB
Bash
Executable file
93 lines
1.8 KiB
Bash
Executable file
#!/bin/sh /etc/rc.common
|
|
|
|
START=01
|
|
USE_PROCD=1
|
|
PROCD_DEBUG=1
|
|
NAME=cgroupd
|
|
|
|
CGBASEDIR=/sys/fs/cgroup
|
|
CGCONFIG="cgroups"
|
|
|
|
DBGLOG=/tmp/cginit.log
|
|
DEBUG=0
|
|
|
|
|
|
cgroupinit_set_knob_value () {
|
|
local knob_val=$1
|
|
local dir=$2
|
|
local knob val
|
|
|
|
knob=$(echo $knob_val |awk -F= '{print $1}')
|
|
val=$(echo $knob_val |awk -F= '{print $2}')
|
|
/bin/echo $val > $CGBASEDIR/$dir/$knob
|
|
[ "$DEBUG" == "1" ] && \
|
|
echo "/bin/echo $val > $CGBASEDIR/$dir/$knob (ret=$?)" >> $DBGLOG
|
|
}
|
|
|
|
cgroupinit_create_group () {
|
|
local cgrp=$1
|
|
local dir
|
|
|
|
[ "$DEBUG" == "1" ] && echo "Create group $cgrp:" >> $DBGLOG
|
|
if [ "$cgrp" == "_root_" ]; then
|
|
dir=.
|
|
else
|
|
dir=$(echo $cgrp |tr '_' '/')
|
|
|
|
if [ ! -d $CGBASEDIR/$dir ]; then
|
|
mkdir $CGBASEDIR/$dir
|
|
[ "$DEBUG" == "1" ] && \
|
|
echo "mkdir $CGBASEDIR/$dir (ret=$?)" >> $DBGLOG
|
|
fi
|
|
fi
|
|
|
|
config_list_foreach $cgrp option cgroupinit_set_knob_value $dir
|
|
}
|
|
|
|
cgroupinit_configure_cgroups () {
|
|
local enab defgrp
|
|
|
|
[ "$DEBUG" == "1" ] && echo "$0 started $(date)" >> $DBGLOG
|
|
config_load $CGCONFIG
|
|
|
|
config_get enab cgroups enabled "1"
|
|
[ $enab -eq 0 ] && return 1
|
|
|
|
config_get defgrp cgroups defgroup "_undef_"
|
|
[ "$defgrp" == "_undef_" ] && return 1
|
|
|
|
if ! grep -q " $CGBASEDIR cgroup " /proc/mounts; then
|
|
mount -t cgroup -o nodev,noexec,nosuid cgroup $CGBASEDIR
|
|
[ $? -eq 0 ] || return 1
|
|
fi
|
|
|
|
config_foreach cgroupinit_create_group cgroup
|
|
return 0
|
|
}
|
|
|
|
start_service () {
|
|
cgroupinit_configure_cgroups
|
|
[ $? -eq 0 ] || return
|
|
|
|
procd_open_instance
|
|
procd_set_param command /sbin/cgroupd $CGBASEDIR $CGCONFIG
|
|
procd_set_param respawn
|
|
procd_close_instance
|
|
}
|
|
|
|
stop_service () {
|
|
local cgdir procs prc
|
|
|
|
for cgdir in $(find $CGBASEDIR -type d -mindepth 1 -depth); do
|
|
procs=$(cat $cgdir/cgroup.procs)
|
|
for prc in $procs; do
|
|
echo $prc > $CGBASEDIR/cgroup.procs
|
|
done
|
|
rmdir $cgdir
|
|
done
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger $CGCONFIG
|
|
}
|
|
|