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

sh/bash/dash/ksh/zsh等Shell脚本
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#31

帖子 BigSnake.NET » 2008-05-26 21:24

kinzess 写了:ok
用2个脚本实现了这个功能- -
你要求的应该是这个功能把?

#! /bin/bash
for i in 1 2 3 4 5 6 7 8 9
do
echo "欢迎访问forum.ubuntu.org"
top
done

#! /bin/bash
#存为test01.sh,先运行这个命令为test01.sh&
for i in 1 2 3 4 5 6 7 8 9
do
sleep 5
killall top
done
不需要两个

代码: 全选

for i in 1 2 3
do
        ( sleep 3 && pkill top) &
        echo $i
        top
done
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#32

帖子 BigSnake.NET » 2008-05-26 21:26

kinzess 写了:
BigSnake.NET 写了:

代码: 全选

$ cat a.sh 
for i in 1 2 3
do
        top &
        echo top
        sleep 1
        killall top
done
Exit status: 0
autumncat@autumncat-host:~
$ bash ./a.sh 
top
        top: failed tty get

        top: failed tty get

top
top
        top: failed tty get

Exit status: 0
循环是不会打断的, top需要tty是另一回事. 楼主说循环退出很难理解, kill 掉 top 是不可能把 上层的 shell 也 kill 的
弱弱地问下
top: failed tty get
这个是什么原因导致的?
我刚才也想到了这个方法。。
也出现了
top: failed tty get
然后查了一下不知道什么原因就放弃这个方法了- -
top 因为是交互式程序, 需要一个终端来显示, 不能脱离终端后台运行(另一个例子是 mplayer)
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
kinzess
帖子: 319
注册时间: 2007-04-11 10:39

#33

帖子 kinzess » 2008-05-26 21:30

学到了
谢谢BigSnake.NET
:lol: :lol: :lol: :lol: :lol:

顺便问下
( sleep 3 && pkill top) &
其中有哪些空格是必须的??
上次由 kinzess 在 2008-05-26 21:31,总共编辑 1 次。
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#34

帖子 paulcross » 2008-05-26 21:30

呵呵 其实这个问题之所以 不好理解就是因为没有合适的例子
top是不怎么合适 但是我又不知道别的可以持续执行的命令

锐捷的认证机制是一直和服务端交流数据的 所以是持续执行的
为什么杀掉它它会退出循环呢 我也不怎么清楚

反正杀了后 它就是输出一句
connection terminated !
然后就
paul@paul-desktop$ 了

锐捷没有连上的时候是不会出现这句话的 也不会跳出循环
可能就是因为这句话的关系
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#35

帖子 BigSnake.NET » 2008-05-26 21:32

paulcross 写了:呵呵 其实这个问题之所以 不好理解就是因为没有合适的例子
top是不怎么合适 但是我又不知道别的可以持续执行的命令

锐捷的认证机制是一直和服务端交流数据的 所以是持续执行的
为什么杀掉它它会退出循环呢 我也不怎么清楚

反正杀了后 它就是输出一句
connection terminated !
然后就
paul@paul-desktop$ 了

锐捷没有连上的时候是不会出现这句话的 也不会跳出循环
可能就是因为这句话的关系
你是放到单独脚本里运行的吗?

将脚本的详细代码和你运行的步骤说说
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#36

帖子 BigSnake.NET » 2008-05-26 21:33

kinzess 写了:学到了
谢谢BigSnake.NET
:lol: :lol: :lol: :lol: :lol:

顺便问下
( sleep 3 && pkill top) &
其中有哪些空格是必须的??
不知道, 自己试试吧
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#37

帖子 BigSnake.NET » 2008-05-26 21:34

"持续执行" 倒是没什么, 基本上所有程序都可以当做"持续执行", 只要没有阻塞 TERM 信号, kill 都会将其杀死
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
kinzess
帖子: 319
注册时间: 2007-04-11 10:39

#38

帖子 kinzess » 2008-05-26 21:34

BigSnake.NET 写了:
kinzess 写了:学到了
谢谢BigSnake.NET
:lol: :lol: :lol: :lol: :lol:

顺便问下
( sleep 3 && pkill top) &
其中有哪些空格是必须的??
不知道, 自己试试吧
我就是不知道
之前写就是因为空格的问题害我调试了很久。。郁闷
有些地方要空格,有些又不需要
有时候加了和不加问题很大
偏偏又看不出来
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#39

帖子 eexpress » 2008-05-26 22:12

BigSnake.NET 写了:
eexpress 写了:有wait命令的啊。定时查看输出的。
不太明确你搞什么。
wait 是等待子进程...
我不爱看别人的实际的脚本,以为是需要交互操作。

wait + expect + sleep 是一个完整的交互应答环境了啊。可以根据提示,自动回答。
● 鸣学
头像
kinzess
帖子: 319
注册时间: 2007-04-11 10:39

#40

帖子 kinzess » 2008-05-26 22:16

paulcross 写了:呵呵 其实这个问题之所以 不好理解就是因为没有合适的例子
top是不怎么合适 但是我又不知道别的可以持续执行的命令

锐捷的认证机制是一直和服务端交流数据的 所以是持续执行的
为什么杀掉它它会退出循环呢 我也不怎么清楚

反正杀了后 它就是输出一句
connection terminated !
然后就
paul@paul-desktop$ 了

锐捷没有连上的时候是不会出现这句话的 也不会跳出循环
可能就是因为这句话的关系
既然它无论怎么样都会退出循环。。。
那么。。。把启动命令写在脚本1里
另外一个脚本2就写循环启动脚本1。。
这样脚本2就不会退出了把?
再退出我就真的是没招了
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#41

帖子 paulcross » 2008-05-26 22:32

gedit
这个命令就是非持续执行的

top
这个命令就是持续执行的

#!/bin/sh

while :
do
superstar -i eth0 -u 用户名 -p 密码
sleep 240
echo "eeeee"
killall superstar &
echo "ffffff"
done


这就是完整代码了
每次到killall superstar 的时候就跳出循环
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

#42

帖子 yingfei » 2008-05-27 11:18

楼上的,在 superstar -i eth0 -u 用户名 -p 密码 后边加个 & 不行么?
superstar -i eth0 -u 用户名 -p 密码 &
如果这样 superstar 变成了 暂停状态, 那么 用 bg 让它继续运行。

代码: 全选

superstar -i eth0 -u 用户名 -p 密码  &
bg
sleep 240 
echo "eeeee" 
kill $(pidof superstar)
echo "ffffff" 
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#43

帖子 BigSnake.NET » 2008-05-27 12:00

paulcross 写了:gedit
这个命令就是非持续执行的

top
这个命令就是持续执行的

#!/bin/sh

while :
do
superstar -i eth0 -u 用户名 -p 密码
sleep 240
echo "eeeee"
killall superstar &
echo "ffffff"
done


这就是完整代码了
每次到killall superstar 的时候就跳出循环
这是不可能的,
superstar -i eth0 -u 用户名 -p 密码 压根没返回, 下面的语句不会执行..

贴一下输出吧..

PS : 完全无法理解 LZ 所谓的 "持续运行" 概念
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#44

帖子 paulcross » 2008-05-27 12:32

你首先把superstar 拷贝到/bin 里面 设定为可执行 否则这个东西当然没输出了
另外你的用户名 密码都要输入正确否则就没办法连接的

其实你们要我帖我自己的这个脚本 都没有意义的 这个脚本只有你们也是用锐捷上网的情况下才能测试




top命令和 ls 命令的区别 是什么 就是持续执行和一次性执行的区别
头像
冲浪板
论坛版主
帖子: 7513
注册时间: 2007-05-06 8:19

#45

帖子 冲浪板 » 2008-05-27 12:34

watch怎么样
回复