cgroup tweaks

Signed-off-by: fbt <fbt@fleshless.org>
This commit is contained in:
Jack L. Frost 2018-03-05 00:35:29 +03:00
parent 623bf57bdb
commit 2f3837d07c
2 changed files with 27 additions and 24 deletions

16
ssm
View File

@ -151,18 +151,18 @@ svc() {
printf '%s' $BASHPID > "$svc_pidfile" printf '%s' $BASHPID > "$svc_pidfile"
# Cgroups
if cgroups; then
mkdir -p "$cgroup_home/$service_cgroup_name"
echo "$BASHPID" > "$cgroup_home/$service_cgroup_name/cgroup.procs"
fi
while true; do while true; do
job_success = 0 # Needs to be reset job_success = 0 # Needs to be reset
# Spawn the process and record the PID # Spawn the process and record the PID
spawn "$@" & job_pid = "$!" spawn "$@" & job_pid = "$!"
# Cgroups
if cgroups; then
mkdir -p "$cgroup_home/$service_cgroup_name"
echo "$job_pid" > "$cgroup_home/$service_cgroup_name/cgroup.procs"
fi
# Wait for the process to exit and record the exit code # Wait for the process to exit and record the exit code
# This depends on a few things # This depends on a few things
if service_managed; then if service_managed; then
@ -552,12 +552,12 @@ var service_reload_signal = 1
var service_stop_signal = 15 var service_stop_signal = 15
var service_cgroup_exclusive = 0 # Refuse to start the service if its cgroup is not empty var service_cgroup_exclusive = 0 # Refuse to start the service if its cgroup is not empty
var service_cgroup_wait = 0 # Wait on all the members of the cgroup to exit when stopping the service. var service_cgroup_wait = 0 # Wait on all the members of the cgroup to exit when stopping the service.
var service_cgroup_strict = 1 # Enable checking if the main service PID is in the correct cgroup before doing anythin with the service
var service_success_exit = 0 # Array, takes exit codes that are to be treated as successful termination. var service_success_exit = 0 # Array, takes exit codes that are to be treated as successful termination.
var service_pidfile_timeout = 15 # How long to wait for unmanaged services to create their pidfiles. var service_pidfile_timeout = 15 # How long to wait for unmanaged services to create their pidfiles.
# Global config # Global config
var cgroups = 0 # Enable cgroup-related functions var cgroups = 0 # Enable cgroup-related functions
var cgroups_check_pid = 1 # Enable checking if the main service PID is in the correct cgroup before doing anythin with the service
var usrdir = '/usr/share/ssm' var usrdir = '/usr/share/ssm'
# These are not # These are not
@ -748,7 +748,7 @@ if cgroups; then
fi fi
# If there's a service PID, check if it's in the service's cgroup # If there's a service PID, check if it's in the service's cgroup
if cgroups_check_pid; then if service_cgroup_strict; then
if service_pid; then if service_pid; then
service_cgroup_procs u "$service_pid" || die 29 "Recorded service PID is not in the service's cgroup, bailing!" service_cgroup_procs u "$service_pid" || die 29 "Recorded service PID is not in the service's cgroup, bailing!"
fi fi

View File

@ -1,41 +1,44 @@
# This is actually a bash script # This is actually a bash script
# Enable cgroup-related functions
#cgroups = 0
# Where to search for services, works as a PATH-like array. # Where to search for services, works as a PATH-like array.
#service_path = "$XDG_CONFIG_HOME/ssm/services" /etc/ssm/services "$rundir/services" /usr/share/ssm/services #service_path = "$XDG_CONFIG_HOME/ssm/services" /etc/ssm/services "$rundir/services" /usr/share/ssm/services
# Service defaults # Service defaults
# Respawn the service if it exits
## Respawn the service if it exits
#service_respawn = 0 #service_respawn = 0
# Working directory ## Working directory
#service_workdir = '/' #service_workdir = '/'
# How long do we wait for the service to stop ## How long do we wait for the service to stop
#service_stop_timeout = 30 #service_stop_timeout = 30
# How long do we wait for the service to get ready ## How long do we wait for the service to get ready
#service_ready_timeout = 15 #service_ready_timeout = 15
# Signals to pass through to the service under the respawner ## Signals to pass through to the service under the respawner
#service_signals = 1 10 12 #service_signals = 1 10 12
# The signal to send to reload the service ## The signal to send to reload the service
#service_reload_signal = 1 #service_reload_signal = 1
# The signal to send to stop the service ## The signal to send to stop the service
#service_stop_signal = 15 #service_stop_signal = 15
# Enable cgroup-related functions ## These only work with cgroups = 1:
#cgroups = 0
# Check if the recorded PID of the service is in the correct cgroup. ## Check if the recorded PID of the service is in the correct cgroup.
# Only works with cgroups = 1 ## Only works with cgroups = 1
#cgroups_check_pid = 1 #service_cgroup_strict = 1
# Refuse to start the service if its cgroup is not empty ## Refuse to start the service if its cgroup is not empty
# Only works with cgroups = 1 ## Only works with cgroups = 1
#service_cgroup_exclusive = 0 #service_cgroup_exclusive = 0
# Wait on all the members of the cgroup to exit when stopping the service. ## Wait on all the members of the cgroup to exit when stopping the service.
# Only works with cgroups = 1 ## Only works with cgroups = 1
#service_cgroup_wait = 0 #service_cgroup_wait = 0