linux中cron作业的替代方法是每M分钟运行一次脚本?

linux中cron作业的替代方法是每M分钟运行一次脚本?,linux,cron,crontab,Linux,Cron,Crontab,我需要在每M分钟后运行一个脚本文件。此M是可配置的。现在我已经使用了cron条目,如下所示 */M * * * * /tmp/test.sh 但是,通过使用上述逻辑,M值被限制为5、10、15、30等,例如,M不能设置为28。我可以为此编写一个后台服务,但我想知道除了cron作业还有其他选择。定义一个每分钟运行的cron作业。让它调用检查当前时间的脚本,并且仅当当前时间是M的倍数时才执行您的命令 一种方法是获得日期+%s的结果(这是自纪元1970-01-01 00:00:00 GMT以来的秒数

我需要在每M分钟后运行一个脚本文件。此M是可配置的。现在我已经使用了cron条目,如下所示

*/M * * * * /tmp/test.sh

但是,通过使用上述逻辑,M值被限制为5、10、15、30等,例如,M不能设置为28。我可以为此编写一个后台服务,但我想知道除了cron作业还有其他选择。

定义一个每分钟运行的cron作业。让它调用检查当前时间的脚本,并且仅当当前时间是M的倍数时才执行您的命令

一种方法是获得
日期+%s
的结果(这是自纪元1970-01-01 00:00:00 GMT以来的秒数),除以60得到分钟,然后计算余数模M。在bash中:

M=28
curr_second=$(date +%s)
curr_minute=$((curr_second / 60))
if (( curr_minute % M == 0)) ; then
    # run your command
fi

下面是一个使用
at
jobs实现它的简单方法

在脚本中添加一行,该行在当前运行28分钟后或当前启动28分钟后自行安排,具体取决于适合您的需要

#!/bin/bash
#uncomment if it requires to start next run 28 minutes after this script started regardless of how long this job runs
# at now + 28 min < $0
# The rest of your commands go here...
# commands ....
# uncomment if it's desired to start the next run 28 minutes after this job ends
# at now + 28 min < $0
#/bin/bash
#如果需要在此脚本启动28分钟后开始下一次运行,则取消注释,无论此作业运行多长时间
#现在+28分钟<$0
#你其余的命令都在这里。。。
#命令。。。。
#如果希望在此作业结束后28分钟开始下一次运行,请取消注释
#现在+28分钟<$0

希望这有帮助。如果您的脚本需要特定的shell,请在调用
at
时设置shell环境,就像
shell=/bin/bash在now+28分钟时<$0

这取决于您的系统。查看最简单的方法是使用
at
jobs运行脚本。在脚本结束时,将自身计划为在现在+28分钟运行
。这将确保脚本在上次运行28分钟后执行。