用shell脚本监控进程,挂掉后重启
来源:互联网 发布:mac系统iso镜像百度云 编辑:程序博客网 时间:2024/05/20 03:37
文章分类:操作系统
一.
一个php脚本,经常跑了好几个小时,然后莫名其妙的挂掉,不胜其烦。在没有找到真正的原因之前,只好先写一个daemon作用的shell script来monitor,在发现脚本挂掉后,重启脚本.
以下是在chinaunix找到的相关内容,汇集了各位大神们的意见:
http://bbs.chinaunix.net/thread-1487627-1-1.html
============================================================
请教如何写一个shell监控我的一个进程状态,死了重启
- while true; do
- count=`ps -fe |grep "main" | grep -v "grep"`
- if [ "$?" != "0" ]; then
- echo ">>>>no main,run it"
- else
- echo ">>>>main is running"
- fi
- sleep 2
- done
---------------------------------分割线----------------------------------------------
按照2楼的方法,我的板子里没有wc,也没有crontab
我在终端上执行这个脚本./test,能正确检测,
但是我执行./test &,不管main有没有,都是输出no main,run it
---------------------------貌似解决了------------------------------------
在done后面加 &
============================================================
整体思路看来就是:实现查找进程(ps -ef|grep命令),截取进程字符串关键信息判断是否为空(字符串赋值),执行重启命令(为空时)或跳过(不为空时),用crontab或者循环语句实现定时判断。
发现一个哥们儿写的比我好,拿过来给大家借鉴一下。
- CheckProcess()
- {
- if [ "$1" = ""];
- then
- return 1
- fi
- PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l`
- if [ $PROCESS_NUM -eq 1 ];
- then
- return 0
- else
- return 1
- fi
- }
- while [ 1 ] ; do
- CheckProcess "./a.out"
- CheckQQ_RET=$?
- if [ $CheckQQ_RET -eq 1 ];
- then
- killall -9 a.out
- exec ./a.out &
- fi
- sleep 1
- done
二.
然后, if 的真正模型是:
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
其实, bash中的help if就给了你正确的答案, 但我不知道什么原因无数人就是忽略了它, 而非常多的bash教学资料中都采用了本文开头提出的那种模型来告诉你关于if 结构的事.
注意: [ "$1" = "-a" ] 只一个命令, [ 是命令名!, "$1"是第一个参数, =是第二个参数, "-a"是第三个, ]是第4个. 是[这个命令, 而不是bash本身在报怨 [ "$1" = "-a"] 这样的结构造成的错误, 因为[这个命令对它的参数有所期望, 它期望最后一个参数是 ], 而你用"-a"] 这种连写的形式, 它得到的就只有3个参数: $1, = 和 -a].
三.
在运行该脚本时,发现如下错误:syntax error near unexpected token `else'
问题解决:
1.使用 sh -x change.sh看看哪个地方的有问题
2.使用 dos2unix 字符转换工具 convert file formating
3.如果还没有解决,那只能手动将内容重写一遍
老外这么说:
Solution:
The customer in this case had downloaded the script off our website from a Win95 box,
and then moved the file to the Linux box. This caused DOS ASCII end-of-line characters
to be placed in the script. The solution is to download the script from the Linux box, as
moving it from the Windows environment will always place undesireable characters in
the script.
Or ftp the file in ASCII mode when transfering from Win95 to Linux.
- 用shell脚本监控进程,挂掉后重启
- shell脚本监控进程
- linux shell脚本-监控进程
- shell脚本监控监听器进程
- 监控进程的shell脚本
- Shell脚本编程——用smaps监控进程内存
- centos中shell脚本监控php进程
- linux进程监控重启shell脚本
- 两段shell脚本,监控进程和主动结束进程
- linux shell脚本监控进程,如果进程不在,则重启之
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 用Shell脚本定时监控Linux下的进程状态并自动重启
- 用shell脚本监控进程是否存在 不存在则启动的实例
- 如何让zend studio 中文化
- weka 学习资料链接
- autoconf的使用,帮你如何跨各种类UNIX平台惊醒你的代码调试~
- VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法
- 几个安全研究的的站点
- 用shell脚本监控进程,挂掉后重启
- python中的汉字处理
- 用 Hadoop 进行分布式并行编程, 第 1 部分
- Android 学习笔记(十三):Activity-GridView
- java连接VPN 发送邮件
- C++实现图算法(一)
- 表结构变更用SQL文
- ~~VC下使用Skin++导致右键菜单出错的解决~~
- 数据库中间件的应用实例--部队人员在管理系统中的应用