如何写守护脚本

lgstudyvc 2012-04-24 11:38:51
要写个守护脚本,检查一个程序是否在运行,若没有运行就启动它

请问如何写啊,谢谢额
...全文
330 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgstudyvc 2012-04-26
  • 打赏
  • 举报
回复
对了,老大 []要有空格,很严谨的,可是我不懂!谢谢!
[Quote=引用 21 楼 的回复:]
你试试这个脚本,看报什么错

Java code

#! /bin/bash

while true ; do

PRO_NOW=`ps aux | grep myTest | grep -v grep | wc -l`

if [ $PRO_NOW -lt 1 ]; then
/mytools/myTest &
fi

done
[/Quote]
root_jli 2012-04-26
  • 打赏
  • 举报
回复
你试试这个脚本,看报什么错
#! /bin/bash

while true ; do

PRO_NOW=`ps aux | grep myTest | grep -v grep | wc -l`

if [ $PRO_NOW -lt 1 ]; then
/mytools/myTest &
fi

done
lgstudyvc 2012-04-26
  • 打赏
  • 举报
回复
一直提示,并不停的输出
myGuard.sh:line 9:[0: conmmand not found
myGuard.sh:line 15:[0: command not found

root_jli 2012-04-26
  • 打赏
  • 举报
回复
if [$PRO_NOW -lt 1]这句"[" 后加空格,“]”前加空格,改为
if [ $PRO_NOW -lt 1 ]

killall -9 $PROGRAM这句,改为
kill -9 `ps aux|grep sleep|grep -v grep|awk '{print $2}'`


root_jli 2012-04-25
  • 打赏
  • 举报
回复
查看脚本myGuard.sh是否有问题,运行
/mytools/myGuard.sh
看脚本报什么错,如果没报错,运行
ps aux|grep MyTest|grep -v grep
看是否成功
如果脚本成功,把你的rc.local贴出来
root_jli 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

root_jli
老大:
我把你的代码写成了一个sh文件,叫myGuard.sh放在/目录下的mytools文件夹里
然后我在/etc/rc.d/rc.local里加入如下
/mytools/myGuard.sh
保存,重启,
可是那个代码没有启动我的MyTest程序呢? 操作的对么?
[/Quote]
如果脚本没问题,在把它加在/etc/rc.local下
/mytools/myGuard.sh
注意:要加在exit 0行之前

lgstudyvc 2012-04-25
  • 打赏
  • 举报
回复
为什么我写的脚本,没有启动了MyTest程序呢?

各位大人
lgstudyvc 2012-04-25
  • 打赏
  • 举报
回复
啥叫“僵尸进程”?
[Quote=引用 10 楼 的回复:]
killall -9 杀不掉僵尸进程咩~~
ps -ef 替换 ps aux 不错的
如果是僵尸进程,杀死父进程id~~
不过也不安全。。。碎碎念。。

引用 3 楼 的回复:

Perl code

#! /bin/ash

PRO_PATH="程序的路径"
PROGRAM="程序名"

while true ; do

PRO_NOW=`ps aux | gre……
[/Quote]
lgstudyvc 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
第9行,第15行是什么命令?
[/Quote]
我不知道linux里注视的算不算一行
就是你写的那些,我抄的,然后改革名字

#! /bin/sh
PRO_PATH="/mytools"
PROGRAM="myTest"

while true ; do

PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep | wc -l`

if [$PRO_NOW -lt 1]; then
$PRO_PATH/$PROGRAM 2>/dev/null 1>&2 &

fi

PRO_STAT=`ps aux|grep $PROGRAM |grep T|grep -v grep|wc -l`

# 如果指定进程状态为已停止的信息大于零的话
if [ $PRO_STAT -gt 0 ] ; then
killall -9 $PROGRAM
sleep 2
$PRO_PATH/$PROGRAM 2>/dev/null 1>&2 &
fi
# while、until与for循环皆以do开始以done结束构成循环体
done
# exit 用来结束脚本并返回状态值,0 - 为成功,非零值为错误码,取值范围为0 ~ 255。
exit 0

root_jli 2012-04-25
  • 打赏
  • 举报
回复
第9行,第15行是什么命令?
lgstudyvc 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
查看脚本myGuard.sh是否有问题,运行
/mytools/myGuard.sh
看脚本报什么错,如果没报错,运行
ps aux|grep MyTest|grep -v grep
看是否成功
如果脚本成功,把你的rc.local贴出来
[/Quote]
我到mytools目录下 chmod 777 myGuard.sh
然后 ./myGuard.sh
一直提示
myGuard.sh:line 9:[0: conmmand not found
myGuard.sh:line 15:[0: command not found


还有就是,我把你写开头那行ash改为sh了,不然./myGuard.sh时提示bad interpreter没有哪个文件或目录,有关系吗?
qq120848369 2012-04-25
  • 打赏
  • 举报
回复
写个脚本放到crontab里比较简单, rc这些还真是没玩明白.
Rainlight126 2012-04-24
  • 打赏
  • 举报
回复
killall -9 杀不掉僵尸进程咩~~
ps -ef 替换 ps aux 不错的
如果是僵尸进程,杀死父进程id~~
不过也不安全。。。碎碎念。。
[Quote=引用 3 楼 的回复:]

Perl code

#! /bin/ash

PRO_PATH="程序的路径"
PROGRAM="程序名"

while true ; do

PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep | wc -l`

if [$PRO_NOW -lt 1]; then
$PRO_PATH/$PROGRAM 2>/dev/……
[/Quote]
lgstudyvc 2012-04-24
  • 打赏
  • 举报
回复
root_jli
老大:
我把你的代码写成了一个sh文件,叫myGuard.sh放在/目录下的mytools文件夹里
然后我在/etc/rc.d/rc.local里加入如下
/mytools/myGuard.sh
保存,重启,
可是那个代码没有启动我的MyTest程序呢? 操作的对么?
lgstudyvc 2012-04-24
  • 打赏
  • 举报
回复
感动的哭了。。。。
root_jli 2012-04-24
  • 打赏
  • 举报
回复
假设你的程序叫MyTest,路径为/tmp,替换这两句
PRO_PATH="/tmp"
PROGRAM="MyTest"

$PRO_PATH/$PROGRAM只是将前面的值替换它相当于/tmp/MyTest,这句运行你的程序,后面的符号是后台运行。

while循环一直运行

查看进程如果不存在则启动它,对应脚本
PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep | wc -l`

if [$PRO_NOW -lt 1]; then
$PRO_PATH/$PROGRAM 2>/dev/null 1>&2 &

fi

如果进程存在但处于暂停状态,则杀死它重新启动,对应脚本
if [ $PRO_STAT -gt 0 ] ; then
killall -9 $PROGRAM
sleep 2
$PRO_PATH/$PROGRAM 2>/dev/null 1>&2 &
fi

进入下个循环


lgstudyvc 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
你用文本写保存xxx.sh,然后执行
chmod +x xxx.sh
运行./xxx.sh
[/Quote]
老大,假设我的程序叫MyTest,我没看懂你写的哪个是启动MyTest的?
还有就是我写的这个脚本要一直的运行,因为MyTest不知道啥时候就挂了,脚本就是要在MyTest挂了时把它重新运行一下,不知你写的是否能满足?
linux一点也不知道,,,,,
root_jli 2012-04-24
  • 打赏
  • 举报
回复
你用文本写保存xxx.sh,然后执行
chmod +x xxx.sh
运行./xxx.sh
lgstudyvc 2012-04-24
  • 打赏
  • 举报
回复
root_jli 老大:
我用文本写,要保存成什么格式的?还是用什么写呢?
root_jli 2012-04-24
  • 打赏
  • 举报
回复

#! /bin/ash

PRO_PATH="程序的路径"
PROGRAM="程序名"

while true ; do

PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep | wc -l`

if [$PRO_NOW -lt 1]; then
$PRO_PATH/$PROGRAM 2>/dev/null 1>&2 &

fi

PRO_STAT=`ps aux|grep $PROGRAM |grep T|grep -v grep|wc -l`

# 如果指定进程状态为已停止的信息大于零的话
if [ $PRO_STAT -gt 0 ] ; then
killall -9 $PROGRAM
sleep 2
$PRO_PATH/$PROGRAM 2>/dev/null 1>&2 &
fi
# while、until与for循环皆以do开始以done结束构成循环体
done
# exit 用来结束脚本并返回状态值,0 - 为成功,非零值为错误码,取值范围为0 ~ 255。
exit 0

加载更多回复(2)
      《地下守护神》是暗黑魔幻风格的ARPG手游,是真正按照商业级技术水准研发的Unity大型教学案例。这是“刘老师讲Unity”课程体系中到目前为止最重量级教学课程,本课程将带领大家从手游前端各重要功能开发(基于MVC框架搭建、)到网络端的方方面面知识点,一一进行详细还原讲解,使得学员在短期内游戏研发能力有个质的突破,“主程”虚位以待,等待您的加入。 单机版主要技术点:    1: 前端分层的MVC架构设计,开发自定义的资源动态加载插件、音频插件、对话系统插件、事件监听插件、自定义强大的对象缓冲池脚本插件进行项目性能大幅提升等。    2: UI粒子特效、场景淡入淡出控制。    3: 单机与移动端的双输入控制系统开发。    4: 数值平衡处理与开发。    5: 多种设计模式在游戏研发过程中的灵活运用。    6: XML技术的灵活运用,在系统解耦与资源国际化方面的技术突破。    7: 开发强大灵活的日志系统插件,应对服务器与移动端的各种复杂系统调试需求。温馨提示:        本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(推荐学员使用Unity5.2 版本减少开发过程中不必要的麻烦,VS使用更高版本则没有任何影响。) A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979  

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧