如何重复脚本?

时间:2017-11-15 01:55:10

标签: awk csh

我已经搜索了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 '$1 ~ /^[0-9]+/ {print $1}' >> 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(/                     /,"",$0)}\
BEGIN {\
RS =""\
FS=","\
}\
{\
s=1\
e=150\
if ($1 ~/Job/){\
for(i=s;i<=e;i++){\
    printf("%s", $(i))}\
}\
}' result120 > result126
grep -oE '<[^>]+>' result126 > result125
### Get Current Work Location
awk '$1 ~ /<lsf_login..>/ {getline; print $1}' result125 >result122 #result127
### Get another information and paste it with CWD
foreach file1 ( `cat aaa` )
    echo `bjobs $file1 >> result128`
    echo "getting data"
end
awk '$1 ~ /JOBID/ {getline; printf "%-15s %-15s %-15s %-15s %-20s\n", $1, $2, $3, $4, $5}' result128 >> result129
paste result129 result122 >> output
### Summary
awk '{count1[$2]++}{count2[$4]++}{count3[$3]++}\
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分钟再次运行报告。有人告诉我使用等待,但我已经在人类等待搜索它,但无法找到 有用的例子。这就是我需要你帮助解决这个问题的原因。 非常感谢。

2 个答案:

答案 0 :(得分:3)

每15分钟运行一次脚本

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

或设置cron作业或使用watch

对于c shell,你必须写

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

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

答案 1 :(得分:1)

根据@karakfa回答,您基本上有2个选项。

1)你的第一个选择,即使你使用sleep实现了一种忙等待策略(https://en.wikipedia.org/wiki/Busy_waiting),这个策略使用的CPU /内存比你的第二个选择(cron方法),因为即使它实际上什么都不做,你的内存足迹也会在内存中存在。

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

想象一下,如果你为你机器上运行的许多程序实现这种方法,那么在等待状态下,processus会占用大量内存,它也会对调度算法产生影响(内存/ CPU使用率)。您的操作系统,因为它将有更多进程在队列中进行管理。

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

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

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

希望它对你有所帮助。