如何在特定时间范围内激活一次cron命令?

时间:2016-09-14 10:55:25

标签: cron crontab archlinux cron-task raspberry-pi3

关于我的系统的基本信息:我有一个音乐系统,人们可以安排歌曲在特定时间开始和结束。

OS:Arch linux

此刻它设置了两个crons。一个可以说是1.50(开始时间用“play etc”这样的命令)而另一个设置在3.20(结束时间用“end etc”这样的命令)。

我的设置工作完美,我可以结束删除时间表等,但我现在注意到一个问题!如果我设置上述时间并关闭系统(我的系统是一个覆盆子pi)并重新打开,让我们说2.00并且我错过了1.50截止日期,音乐没有开始(显然),我想尝试使它如此没有无论什么时候我在一个范围内打开它,让我们说:1.50 - 3.20它将启动播放命令。但它会运行一次命令!

我环顾四周,我得到的命令就像:

0 1.50-3.20/2 * * * your_command.sh

但那是每2个小时运行一次。我希望它只在这些时间之间运行一次? 谢谢!

3 个答案:

答案 0 :(得分:1)

您可以添加一个额外的cron作业,在每次重新启动时启动脚本。例如,您可以将这样的行添加到您的crontab:

@reboot /home/pi/startplayback.sh

您的startplayback.sh脚本应检查当前时间是否在所需的时间段内,如果是,则运行所需的命令。例如,下面的代码将打印播放!如果脚本在1:50和3:20之间运行。您可以通过运行WHATEVER

替换 echo'PLAY!'
#!/bin/bash

current=$(date '+%H%M')
(( current=(10#$current) ))
((current > 150 && current < 320 )) && echo 'PLAY!'

P.S。不要忘记让脚本可执行sudo chmod +x startplayback.sh

答案 1 :(得分:1)

您可能希望查看the at command及其实用程序。

SYNOPSIS
     at [-q queue] [-f file] [-mldbv] time
     at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS]
     at -c job [job ...]
     at -l [job ...]
     at -l -q queue
     at -r job [job ...]

     atq [-q queue] [-v]

     atrm job [job ...]

     batch [-q queue] [-f file] [-mv] [time]

at适用于安排一次性作业在将来的某个时间点运行。它维护着这些作业的队列,因此您可以使用它来安排各种不同时间规格的事物。

在我看来,Cron是一个可以反复重复工作的调度程序。

这是一个快速而又肮脏的例子:

echo 'ls -lathF' | at now + 1 minute

正如预期的那样,您将看到一分钟内要完成的工作。尝试atq查看工作列表。

作业完成后,默认情况下会将输出邮寄给您的用户。

答案 2 :(得分:0)

我通过创建一个PHP文件并在重新启动时加载页面然后完成其工作并重定向回到此类等来解决了这个问题。