首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pgrep停止运行的进程以重新启动服务。

pgrep停止运行的进程以重新启动服务。
EN

Stack Overflow用户
提问于 2013-09-17 17:00:23
回答 1查看 1.1K关注 0票数 1

如果当前的Cron作业没有运行,它将启动beaver:

代码语言:javascript
复制
#!/bin/bash
pgrep -l -x beaver || /usr/sbin/service beaver start

我想修改它,以采取行动,如果海狸是无效的(通过重新启动海狸服务,如果失败,杀死它(pkill -u海狸)

代码语言:javascript
复制
# 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

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-17 17:26:35

你可以试试这个:

代码语言:javascript
复制
#!/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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18855676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档