mirror of
https://github.com/iredmail/iRedMail
synced 2026-06-08 14:51:59 +00:00
33 lines
880 B
Bash
33 lines
880 B
Bash
#!/usr/bin/env bash
|
|
#
|
|
# Purpose: Kill SOGo child processes which have been running too long, they
|
|
# may cause high CPU usage.
|
|
# Author: Zhang Huangbin <zhb@iredmail.org>
|
|
# Based on Jan-Frode Myklebust's script published on 04 Apr 2013:
|
|
# https://www.mail-archive.com/users@sogo.nu/msg14152.html
|
|
|
|
# Allow to run for how long (in minutes). e.g. 15, 25.
|
|
LONGEST=10
|
|
|
|
# Kill a pid.
|
|
k() {
|
|
# Usage: k <pid>
|
|
pid="${1}"
|
|
|
|
echo "Killing PID $pid"
|
|
ps -fp $pid
|
|
kill -9 $pid
|
|
}
|
|
|
|
ps -u sogo -opid,ppid,cputime | grep -v PPID | while read pid ppid time; do
|
|
# Don't kill main daemon (ppid=1).
|
|
if [[ X"$ppid" != X"1" ]]; then
|
|
hours="$(echo $time | cut -d: -f1 | sed 's/^0//')"
|
|
minutes="$(echo $time | cut -d: -f2 | sed 's/^0//')"
|
|
|
|
if [[ $minutes -gt ${LONGEST} ]] || [[ $hours -gt 0 ]]; then
|
|
k ${pid}
|
|
fi
|
|
fi
|
|
done
|