我需要创建一个具有以下功能的 cron 作业:
该作业应转到特定目录并每 5 秒触摸一个文件。它应该只运行 1 分钟。逻辑是更改文件的时间戳。
我想出了以下逻辑:
我创建了以下 cron 作业:
00-01 09 * * * /home/flexsys/test.sh
(工作将于9:00开始,持续到9:01)
脚本内容如下:
#!/bin/tcsh
cd /home/A/B/C/
while true
do
sleep 5
touch ABC.txt
done
我不明白在哪个条件选项卡中放置什么。我已经在没有循环子句的情况下尝试过此操作,但它只触及文件一次。我需要重复这样做直到9:01。我可以做什么来实现这个目标?
答案1
00-01 09 * * * /home/flexsys/test.sh (the job will start at 9:00 and run upto 9:01)
这不是这个意思。这意味着作业将在上午 9 点运行和9点01分再次运行。 Cron 没有杀死作业的概念,只是启动它们。
至于while
,您需要运行该date
命令,查找分钟数,并测试是否为00
。在我的系统上
date | cut -c12-19
返回完整时间 12:36:28。您需要弄清楚如何仅从系统上的输出cut
中提取分钟数。date
最后,您需要test
命令来确定该值是否等于 0。
另一种选择是,如果您的脚本需要运行 60 秒,并且您必须每五秒执行一次操作,那么您可以只执行特定次数的操作,然后退出。
您面临的最后一个问题是,ls
大多数(如果不是全部)Unix 系统上的命令不会显示精确到秒的时间戳。您很可能需要外部工具或perl
脚本来验证文件的时间戳是否每五秒更新一次。我无法在这方面帮助你。
答案2
00 09 * * * /home/flexsys/test.sh
#!/bin/tcsh
cd /home/A/B/C/
@ a = 0
while ( $a != 12 )
sleep 5
touch ABC.txt
@ a = $a + 1
end
这只会运行您的脚本一次,但它会触摸您的文件 12 次,每次触摸之间有 5 秒的暂停。只要 12*5 是 60,您就有 1 分钟的脚本运行时间(除非您使用的是慢速文件系统,例如慢速 NFS)