我怎样才能重复一个脚本?

How can i repeat a script?

我已经搜索了在 n 次后重复脚本的命令或解决方案,但我找不到它。 这是我生锈的脚本:

#!/bin/csh -f
rm -rf result120
rm -rf result127
rm -rf result126
rm -rf result125
rm -rf result128
rm -rf result129
rm -rf result122
rm -rf output
rm -rf aaa
### Get job id from user name
foreach file ( `cat name` )
        echo `bjobs -u $file | awk ' ~ /^[0-9]+/ {print }' >> aaa`
        echo "loading"
end
### Read in job id
foreach file ( `cat aaa` )
    echo `bjobs -l $file >> result120`
    echo "loading"
end
### Get pattern in < >
awk '{\
gsub(/                     /,"",[=10=])}\
BEGIN {\
RS =""\
FS=","\
}\
{\
s=1\
e=150\
if ( ~/Job/){\
for(i=s;i<=e;i++){\
    printf("%s", $(i))}\
}\
}' result120 > result126
grep -oE '<[^>]+>' result126 > result125
### Get Current Work Location
awk ' ~ /<lsf_login..>/ {getline; print }' result125 >result122 #result127
### Get another information and paste it with CWD
foreach file1 ( `cat aaa` )
    echo `bjobs $file1 >> result128`
    echo "getting data"
end
awk ' ~ /JOBID/ {getline; printf "%-15s %-15s %-15s %-15s %-20s\n", , , , , }' result128 >> result129
paste result129 result122 >> output
### Summary
awk '{count1[]++}{count2[]++}{count3[]++}\
END{\
print "\n"\
print "##########################################################################"\
print "There are: ", NR " Jobs"\
for(name in count1){ print name, count1[name]}\
print "\n"\
for(queqe in count2){ print queqe, count2[queqe]}\
print "\n"\
for(stt in count3){ print stt, count3[stt]}\
}' output >> output

我的愿望是 运行 每 15 分钟再次获得报告。有人告诉我使用 Wait 但我已经在 man wait 中搜索过但找不到任何 有用的例子。这就是为什么我需要你的帮助来解决这个问题。 非常感谢。

运行 每 15 分钟脚本一次

while true; do ./script.sh; sleep 900; done

或设置cron工作或使用watch

对于 c shell 你必须写

while (1)
   ./script.sh
   sleep 900
end

但是既然你有 bash 为什么还要使用 csh?仔细检查语法,因为我不记得了...

按照@karakfa 的回答,你基本上有两个选择。

1) 你的第一个选项,即使你使用 sleep 实现了一种 busy-waiting 策略(https://en.wikipedia.org/wiki/Busy_waiting),这个策略使用CPU/memory 比您的第二个选项(cron 方法)更多,因为即使它实际上什么都不做,您也会在内存中拥有您的 processus 足迹。

2) 另一方面,在 cron 方法中,您的进程只会在执行有用的活动时出现。

试想一下,如果你在你的机器上为很多程序运行实现这种方法,大量的内存将被处于等待状态的进程消耗,它也会产生影响(memory/CPU usage) 在你的 OS 的调度算法上,因为它将有更多的队列中的进程需要管理。

因此,我绝对会 推荐 cron/scheduling 方法。

无论如何,无论您是否在 crontab 中添加条目,您的 cron 守护程序都将 运行 在后台运行,那么为什么不添加呢?

最后但并非最不重要的一点是,想象一下,如果您正忙于等待的进程因任何原因被杀死,如果您选择第一个选项,您将需要手动重新启动它,并且您可能会丢失一些监控条目。

希望对你有帮助。