Привет, я ищу сценарий BASH для CentOS 6.5, который убивает процессы по имени, которые выполняются более 5 минут. Я задавал этот вопрос раньше и получил ответ, который не работает в CentOS, потому что killall не имеет --older-than. Я ищу аналог, который будет работать под CentOS.
Этот пост здесь: Убейте любой процесс GS, который выполнялся более 5 минут на CentOS 6.5.
Спасибо!
Я действительно предлагаю найти первопричину Эта проблема (или Эта проблема или Эта проблема).
А killall
- это деспотичный подход к управлению процессами, и ваша реальная проблема, вероятно, связана с проблемой приложения или ресурсов.
Можете рассказать, что вы пробовали до сих пор? Я бы хотел проверить следующие типы вещей:
strace
затронутых PID и родительских PID.На основе ваш вывод из предыдущего вопроса, похоже, вы выделили только 1 гигабайт оперативной памяти для этой системы и, возможно, у вас только один процессор - без свопа ...
Если ничего не помогает, вы можете написать сценарий, который может очистить старые или остановленные процессы ... или просто скомпилировать версию killall
который поддерживает --older-than
флаг.
Будет ли что-то подобное?
#!/bin/bash
PROC_NAME=my_proc_name
# Get all PIDs for process name
procs=(`ps aux | grep $PROC_NAME | awk '{print $2}'`)
# for each PID in PIDs array
for pid in $procs; do
# get elapsed time in form mm:ss and remove ":" character
# to make it easier to parse time
time=(`ps -o etime $pid | sed -e 's/[:-]/ /g'`)
# get minutes from time
min=${time[1]}
# if proces runs 5 minutes then kill it
if [ "$min" -gt "5" ]; then
kill -9 $pid
fi
done;
Конечно, это должно выполняться cron или чем-то в этом роде, чтобы периодически проверять процессы.