关于让程序自动重启的脚本

leihelin5201314 2011-03-18 12:05:47
#!/bin/bash
#ulimit -SHn 1048576
DATE=`date +%F' '%H:%M:%S`
if [ "`pgrep test`" ]
then
echo "test alive"
else
killall -9 "test"
echo "daltest dead, trying to restart"
echo "start"
/home/daltest &
fi

1,这个是我用来重启程序test.c的脚本,目的是当程序挂掉后可以自动重启,可是当我发现程序死掉之后并没有自动启动,不知道这是什么原因?应该怎么改正谢谢!
2, 我想将程序在机器开机的时候可以自动启动程序,不知道该怎么设置?
...全文
579 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
leihelin5201314 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 leihelin5201314 的回复:]

引用 17 楼 steptodream 的回复:

crontab的计划任务是什么?怎么加进去?
--------------
计划任务就是定时或者按某种计划执行的任务 比如每分钟执行一次你的检查脚本 请执行下面的命令
crontab -e
然后追加
*/1 * * * * /path/monitor.sh >/dev/null 2>&1


/path/……
[/Quote]求解~谢谢~
leihelin5201314 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 steptodream 的回复:]

crontab的计划任务是什么?怎么加进去?
--------------
计划任务就是定时或者按某种计划执行的任务 比如每分钟执行一次你的检查脚本 请执行下面的命令
crontab -e
然后追加
*/1 * * * * /path/monitor.sh >/dev/null 2>&1


/path/monitor.sh换成你的实际路径
[/Quote]
再次求问,既然可以把脚本直接加crontab的计划任务里边,那为什么不能直接将
/path/monitor.sh 此处的脚本路径直接换成可执行文件的路径呢?这样也可以实现每分钟执行一次程序,程序挂了可以启动,没挂就会提示 绑定地址还在使用,这样也不会影响程序继续运行的,那为什么还要用脚本呢?我用脚本的目的就是让程序挂了之后可以重启。我试过了下边的程序,
int main()
{
sleep(5);
printf("test\n");
return 0;
}
我的想法是将这个程序用到monitor.sh 脚本里,程序运行完一次输出一个test之后退出,但是还会被脚本充许运行。但是事实上我发现程序运行完一次输出一个test之后并没有再输出下一个test,这并不是我想要的结果,难道非的加到crontab的计划任务才能解决吗?
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steptodream 的回复:]

1,这个是我用来重启程序test.c的脚本,目的是当程序挂掉后可以自动重启,可是当我发现程序死掉之后并没有自动启动,不知道这是什么原因?应该怎么改正谢谢!
-------
先手动把test关闭 然后sh -x ./your-script.sh看看详细执行过程

2, 我想将程序在机器开机的时候可以自动启动程序,不知道该怎么设置?
最简单的方法 echo "/home/daltest ……
[/Quote]我想知道,这个脚本有问题吗?不知道我写的对不对···
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lgxwqq111 的回复:]

首先这个程序得有可执行权限
然后要做crontab任务,不知到lz做了没

要想开机启动的话放到/etc/rc.local文件中
[/Quote]执行权限有···crontab任务没做,不清楚是什么东西··我查下··

要想开机启动的话放到/etc/rc.local文件中
=================
是把什么放到/etc/rc.local文件中?这个脚本?
freetstar 2011-03-18
  • 打赏
  • 举报
回复
首先这个程序得有可执行权限
然后要做crontab任务,不知到lz做了没

要想开机启动的话放到/etc/rc.local文件中
steptodream 2011-03-18
  • 打赏
  • 举报
回复
1,这个是我用来重启程序test.c的脚本,目的是当程序挂掉后可以自动重启,可是当我发现程序死掉之后并没有自动启动,不知道这是什么原因?应该怎么改正谢谢!
-------
先手动把test关闭 然后sh -x ./your-script.sh看看详细执行过程

2, 我想将程序在机器开机的时候可以自动启动程序,不知道该怎么设置?
最简单的方法 echo "/home/daltest &" >> /etc/rc.local

更好的方法 自己写个启动脚本 参考http://litvip.com/2011/02/23/151
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 steptodream 的回复:]

crontab的计划任务是什么?怎么加进去?
--------------
计划任务就是定时或者按某种计划执行的任务 比如每分钟执行一次你的检查脚本 请执行下面的命令
crontab -e
然后追加
*/1 * * * * /path/monitor.sh >/dev/null 2>&1


/path/monitor.sh换成你的实际路径
[/Quote]多谢!
steptodream 2011-03-18
  • 打赏
  • 举报
回复
crontab的计划任务是什么?怎么加进去?
--------------
计划任务就是定时或者按某种计划执行的任务 比如每分钟执行一次你的检查脚本 请执行下面的命令
crontab -e
然后追加
*/1 * * * * /path/monitor.sh >/dev/null 2>&1


/path/monitor.sh换成你的实际路径
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 steptodream 的回复:]

引用 14 楼 leihelin5201314 的回复:

我用您的方法,在 sh -x ./monitor.sh 的前后都 pgrep test 试过了,我的结果也可以执行,但是我疑惑为什么今凌晨我的程序挂掉后没自动重启

把你的monitor加到crontab的计划任务里 每隔一会就执行一次
就算一次出现异常没启动了 下次应该是没问题的
[/Quote]crontab的计划任务是什么?怎么加进去?
steptodream 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 leihelin5201314 的回复:]

我用您的方法,在 sh -x ./monitor.sh 的前后都 pgrep test 试过了,我的结果也可以执行,但是我疑惑为什么今凌晨我的程序挂掉后没自动重启
[/Quote]
把你的monitor加到crontab的计划任务里 每隔一会就执行一次
就算一次出现异常没启动了 下次应该是没问题的
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
我用您的方法,在 sh -x ./monitor.sh 的前后都 pgrep test 试过了,我的结果也可以执行,但是我疑惑为什么今凌晨我的程序挂掉后没自动重启
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
sxm@sxm-desktop:~$ sh -x ./monitor.sh
+ date +%F %H:%M:%S
+ DATE=2011-03-18 14:44:45
+ pgrep test
+ [ ]
+ killall -9 test
test:没有发现操作
+ echo test dead, trying to restart
test dead, trying to restart
+ echo start
start
sxm@sxm-desktop:~$ + /home/daltest
这个是我的结果,但是我比您的少一句+ /home/test <--很奇怪,你执行的时候没有这一句,我的+ /home/daltest 这一句直接挪到 sxm@sxm-desktop:~$ 这了···
可是我执行完sh -x ./monitor.sh之后程序就运行了,没结束,客户端还可以链接的(test是个简单的服务端程序)
steptodream 2011-03-18
  • 打赏
  • 举报
回复
按你这样说 你这个代码应该是没问题的 我测试了
[root@test home]# cat test.c #弄了个最简单的睡觉程序,防止执行后退出
int main()
{
sleep(100000);
return 0;
}
[root@test home]# gcc -o test test.c
[root@test home]# cat monitor.sh
#!/bin/bash
#ulimit -SHn 1048576
DATE=`date +%F' '%H:%M:%S`
if [ "`pgrep test`" ]
then
echo "test alive"
else
killall -9 "test"
echo "daltest dead, trying to restart"
echo "start"
/home/test &
fi
[root@test home]# pgrep test #现在查看一下,test没有执行
[root@test home]# sh -x ./monitor.sh #执行monitor.sh
++ date '+%F %H:%M:%S'
+ DATE='2011-03-18 15:30:05'
++ pgrep test
+ '[' '' ']'
+ killall -9 test
test: no process killed
+ echo 'daltest dead, trying to restart'
daltest dead, trying to restart
+ echo start
start
+ /home/test <--很奇怪,你执行的时候没有这一句
[root@test home]# pgrep test #现在再查看 有了
10355

你那个test程序是不是执行一次,马上就结束了!
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leihelin5201314 的回复:]

引用 7 楼 steptodream 的回复:

这就是我手动把test关闭后执行脚本的提示,没提示什么问题
-----------
可是最后一句/home/daltest &amp; 并未执行。

你的程序名叫daltest? 检查的脚本叫什么?
错了。程序就是test.c,执行文件也是test,笔误,不好意思,不过脚本里是对的
[/Quote]脚本名字:monitor.sh
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lgxwqq111 的回复:]

daltest
这个时干嘛的
[/Quote]错了。程序就是test.c,执行文件也是test,笔误,不好意思,不过脚本里是对的
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 steptodream 的回复:]

这就是我手动把test关闭后执行脚本的提示,没提示什么问题
-----------
可是最后一句/home/daltest & 并未执行。

你的程序名叫daltest? 检查的脚本叫什么?
[/Quote]错了。程序就是test.c,执行文件也是test,笔误,不好意思,不过脚本里是对的
freetstar 2011-03-18
  • 打赏
  • 举报
回复
daltest
这个时干嘛的
steptodream 2011-03-18
  • 打赏
  • 举报
回复
这就是我手动把test关闭后执行脚本的提示,没提示什么问题
-----------
可是最后一句/home/daltest & 并未执行。

你的程序名叫daltest? 检查的脚本叫什么?
leihelin5201314 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 steptodream 的回复:]
要想开机启动的话放到/etc/rc.local文件中
=================
是把什么放到/etc/rc.local文件中?这个脚本?
----------------------
我在上面已经说的很明白了嘛 你要启动的是程序 而非脚本 添加脚本干什么?
最简单的方法 echo "/home/daltest &" >> /etc/rc.local

你的脚本看上去……
[/Quote]
+ date +%F %H:%M:%S
+ DATE=2011-03-18 13:15:42
+ pgrep test
+ [ ]
+ killall -9 test
daltest:没有发现操作
+ echo test dead, trying to restart
+ test dead, trying to restart
+ echo start
start

这就是我手动把test关闭后执行脚本的提示,没提示什么问题
steptodream 2011-03-18
  • 打赏
  • 举报
回复

要想开机启动的话放到/etc/rc.local文件中
=================
是把什么放到/etc/rc.local文件中?这个脚本?
----------------------
我在上面已经说的很明白了嘛 你要启动的是程序 而非脚本 添加脚本干什么?
最简单的方法 echo "/home/daltest &" >> /etc/rc.local

你的脚本看上去是满足要求的 可是我又不知道你那个daltest是个啥样的程序 所以让你sh -x ./your-script.sh看详细执行过程

23,124

社区成员

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

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