Cron 作业每 5 秒运行一次

Cron 作业每 5 秒运行一次

我需要创建一个具有以下功能的 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)

相关内容