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

How do i activate cron command once within specific time frame?

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

OS:拱门linux

目前设置了两个cron。一个可以说是 1.50(使用 "play etc" 这样的命令开始时间),另一个设置为 3.20(使用 "end etc" 这样的命令结束时间)。

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

我环顾四周,得到的命令如下:

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

但是那是每 2 小时 运行。我想让它在这些时间之间只 运行 一次吗? 谢谢!

您可以添加一个额外的 cron 作业,它会在每次重新启动时启动一个脚本。例如,您可以在 crontab 中添加如下一行:

@reboot /home/pi/startplayback.sh

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

#!/bin/bash

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

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

您可能想查看 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 查看工作列表。

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

我通过创建 PHP 文件解决了这个问题,并在重新启动时加载页面,然后执行它的工作并重定向回某某。