2013-09-17 5 views
1

Моего текущий cronjob начнет бобр, если он не работает:pgrep несуществующей процесса, чтобы перезапустить службу

#!/bin/bash 
pgrep -l -x beaver || /usr/sbin/service beaver start 

Я хотел бы изменить его, чтобы принять меры, если бобер несуществующий (путем перезапуска службы бобра, и если это не удается убить его (pkill -u бобра)

# ps -ef | grep [b]eaver 
beaver 2890  1 0 Sep15 ?  00:11:27 /usr/bin/python /usr/local/bin/beaver -t sqs -c /etc/beaver/beaver.conf 
beaver 2899 2890 0 Sep15 ?  00:03:01 [beaver] <defunct> 
# pgrep -l -x beaver 
2890 beaver 
2899 beaver 

предложения

ответ

1

Вы можете попробовать это одно:

#!/bin/bash 
START=false 
readarray -t PIDS < <(exec pgrep -x beaver) 

function stop_beaver { 
    /usr/sbin/service beaver stop 
    sleep 5s ## Optionally wait for processes to stop. 
    kill -s SIGTERM "${PIDS[@]}" ## Perhaps force another signal to them if it doesn't work with defuncts. 
    sleep 5s ## Optionally wait for processes to stop. 
    kill -s SIGKILL "${PIDS[@]}" ## Perhaps force another signal to them if it doesn't work with defuncts. 
    START=true 
} 
if [[ ${#PIDS[@]} -eq 0 ]]; then 
    echo "No beaver process was found." 
    START=true 
elif [[ ${#PIDS[@]} -eq 1 ]]; then 
    echo "Processes found: ${PIDS[*]}" 
    echo "Only one beaver process found." 
    stop_beaver 
elif ps -fp "${PIDS[@]}" | fgrep -F '<defunct>' >/dev/null; then 
    echo "Processes found: ${PIDS[*]}" 
    echo "Defunct beaver process found." 
    stop_beaver 
else 
    echo "Processes found: ${PIDS[*]}" 
fi 
[[ $START == true ]] && /usr/sbin/service beaver start 
+0

@brakertech Спасибо за редактирование. Хороший. – konsolebox

Смежные вопросы