分页: 1 / 4

让一个持续执行的命令每隔几分钟执行一次怎么写

发表于 : 2008-05-23 21:40
paulcross
我因为锐解上网 经常掉线 所以要写一个每隔几分钟 重新连一次的脚本

但是那个命令是和top一样的 是持续执行的 没办法在一个循环里终止掉 这种情况脚本该怎么写

--------------------------------
#! /bin/bash
for i in 1 2 3 4 5 6 7 8 9
do
top
echo "rrr"
sleep 2
killall top
done
--------------------------------

这样写是不管用的
怎么能把这个脚本改为每隔几分钟就终止再打开top一次

发表于 : 2008-05-23 21:48
eexpress
愿意cron不

发表于 : 2008-05-23 21:53
xiooli
如果不看输出的话可以后台执行,或者把输出重定向到某个文件。

发表于 : 2008-05-23 21:57
paulcross
cron也是一样阿
这个top命令打开后不用手动 停止不了阿
况且我的cron还有问题 每次设定都不管用

我不用看到输出 但是这种持续执行的命令脚本中断不了
中断不了我就没法让它再打开

发表于 : 2008-05-23 22:14
xiooli
paulcross 写了:cron也是一样阿
这个top命令打开后不用手动 停止不了阿
况且我的cron还有问题 每次设定都不管用

我不用看到输出 但是这种持续执行的命令脚本中断不了
中断不了我就没法让它再打开
在命令后边加&比如top &就会在后台执行,然后你的循环不受影响。

发表于 : 2008-05-23 22:22
paulcross
这个反正top & 是不行的 top命令直接出错

我实验下我的那个锐解行不行

但是这样还是没关闭那个命令
最后后台是不是会一大堆没关闭的命令在执行?

发表于 : 2008-05-23 22:28
xiooli
恩,貌似top是不行。不过一般来说都是可以后台运行的,至于会有一堆命令在运行,你可以开新的命令之前把旧的kill掉嘛。

发表于 : 2008-05-23 22:32
nobrain
paulcross 写了: 况且我的cron还有问题 每次设定都不管用
如果设定不管用的话,那么系统的其它依靠cron运行的也应该有问题。
你是怎样在cron里面设置的?

发表于 : 2008-05-23 23:14
paulcross
kill掉持续命令的话 会中断循环的
我实验了下 会中断循环的 而且killall 这种命令没法在后台执行 加上&也是会中断

发表于 : 2008-05-23 23:20
xiooli
paulcross 写了:kill掉持续命令的话 会中断循环的
我实验了下 会中断循环的 而且killall 这种命令没法在后台执行 加上&也是会中断
???lz可以放出脚本看看

Re: 让一个持续执行的命令每隔几分钟执行一次怎么写

发表于 : 2008-05-23 23:24
stlxv
paulcross 写了:我因为锐解上网 经常掉线 所以要写一个每隔几分钟 重新连一次的脚本

但是那个命令是和top一样的 是持续执行的 没办法在一个循环里终止掉 这种情况脚本该怎么写

--------------------------------
#! /bin/bash
for i in 1 2 3 4 5 6 7 8 9
do
top
echo "rrr"
sleep 2
killall top
done
--------------------------------

这样写是不管用的
怎么能把这个脚本改为每隔几分钟就终止再打开top一次
sleep久一点

发表于 : 2008-05-23 23:26
stlxv
kill并不是终结,而是向一个程序发送信号

你可以发送SIGKILL信号来强制结束一个程序

代码: 全选

kill -s SIGKILL 你要结束的

发表于 : 2008-05-23 23:36
nobrain
paulcross 写了:kill掉持续命令的话 会中断循环的
我实验了下 会中断循环的 而且killall 这种命令没法在后台执行 加上&也是会中断
你是怎么实验的?

发表于 : 2008-05-23 23:45
paulcross
我是用锐解那个客户端程序来作的阿

脚本和上面一样的 用killall rj(锐解客户端程序的名字) 代替killall top
sleep 用的时候都是设定为 240的 (4分钟)


反正killall rj这个命令执行后 整个脚本也就结束了 不会进行下一轮循环

发表于 : 2008-05-23 23:46
paulcross
killall rj 这句加不加 & 都一个结果
在终端里看就是 xxx terminated! 然后就跳出来了