编写守护脚本需要注意的的两个问题

本文介绍了如何在crontab中定时运行脚本,并通过ps命令监控特定进程,确保其正常运行。重点提及了使用'nohup'命令在进程挂掉后自动重启,并强调了在脚本前加载.bash_profile的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在crontab里定时运行脚本,脚本名称和路径里不要包含被守护的进程名,否则在判断进程数的时候会比预想的多。另外,最好使用“ps -ef|grep -w”而不是“ps -ef|grep ”, -w 是整字匹配。
2、进程挂掉之后再拉起用到了nohup,需要在脚本前加一句“source ~/.bash_profile”。碰到两个地方的服务器没加这一句导致nohup失效。可能nohup对环境变量有要求。

以下是我部署在一台服务器上的守护脚本:
crontab:
  1. #进程守护脚本
  2. */5 * * * * bash /home/greenet_check/moniter.sh >>/home/greenet_check/moniter.log
复制代码
脚本:
  1. #!/bin/bash
  2. ## ==========================================================================
  3. ## Copyright (c)  Shenzhen *** Communication Co.,Ltd. All rights reserved.
  4. ##
  5. ##  进程守护脚本(进程不在时邮件告警、自动拉起、压缩core文件)
  6. ##
  7. ##  Written by linl 2012-03-27
  8. ##

  9. source ~/.bash_profile

  10. PROCNAME=radius
  11. BINPATH=/home/radius/bin
  12. MAILADDR=moniter@126.com

  13. echo -n "[`date +"%Y-%m-%d %H:%M:%S"`] "

  14. let PROCNUM=$(ps -ef|grep -w ${PROCNAME}|grep -vw grep|wc -l)
  15. if [ "$PROCNUM" -le "0" ];then
  16.     echo -n "[ERROR] "
  17.     mail -s "告警! ${PROCNAME}挂了" ${MAILADDR} <. -- -f ${HOSTNAME}@moniter.com -F moniter
  18.     cd ${BINPATH}
  19.     nohup ./${PROCNAME} >/dev/null &
  20.     gzip core.*
  21. else
  22.     echo -n "[OK]    "
  23. fi
  24. echo -e "proc name is \"${PROCNAME}\"  proc num is ${PROCNUM}"
复制代码
moniter@126.com仅是举例,非真实邮箱。有些邮箱不能作为邮件告警的接收邮箱,126邮箱可以,可能是sendmail所发邮件格式不够规范导致的吧,没仔细研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值