cronjob:在启动/唤醒时运行 script_A,然后每隔 5 分钟,在其间的 4 分钟内运行 script_B(所以*不*只是模 5 时钟分钟)

cronjob:在启动/唤醒时运行 script_A,然后每隔 5 分钟,在其间的 4 分钟内运行 script_B(所以*不*只是模 5 时钟分钟)

所以我想以一种非常具体的方式设置一个 cronjob:

  • 在启动/唤醒时运行 script_A

  • 然后每隔 5 分钟,相对于启动/唤醒(所以不是只是以 5 时钟分钟为模)

  • 每 4 分钟运行 script_B之间(即 script_A 执行时的分钟数不是跑步)

我对这件事实在是缺乏经验
所以我正在寻找关于如何做的建议开始首先深入挖掘...


cron本身(或者也许是anacron我正在使用的技术?)似乎相当有限,
而且它能做的最好的事情显然是
*/5 * * * * /home/username/script_A.sh


fcron似乎更强大/灵活,包括一些语法:
@ 5 /home/username/script_A.sh
这似乎得到了“每 5 分钟相对于启动/唤醒,不仅仅是模时钟分钟”[...虽然我注意到 stackexchange 不 fcron作为可用标签,所以这可能不是一个好兆头......]


仍然不知道如何在 4 分钟的每一分钟中处理“script_B”之间不过,script_A”。


systemd 定时器是什么样的?
来自一个非常乍一看,它们看起来有点像样板式的冗长......?
但也许他们拥有我正在寻找的力量/灵活性......?


还有什么我应该调查的吗?




我正在使用 opensuse tumbleweed,所以,
我知道,例如,如果我去吧fcron
它会需要一个小的努力确保我已经真的已安装适当地
因为我必须手动执行此操作。

即,我做过已经从 github 安装了它,
但我很确定至少有一两个棘手的地方我需要追踪才能真正得到它正确地集成到我的系统中。

我什么我的包管理器的存储库中有:
$ zypper info cron cronie cronie-anacron kcron
#=>

 Loading repository data...  
 Reading installed packages...


 Information for package cron:  
 -----------------------------  
 Repository     : Main Repository (OSS)  
 Name           : cron  
 Version        : 4.2-91.3  
 Arch           : x86_64  
 Vendor         : openSUSE  
 Installed Size : 181 B  
 Installed      : Yes (automatically)  
 Status         : up-to-date  
 Source package : cronie-1.6.1-91.3.src  
 Upstream URL   : https://github.com/cronie-crond/cronie  
 Summary        : Auxiliary package  
 Description    :  
     Auxiliary package, needed for proper update from vixie-cron 4.1 to cronie 1.4.4


 Information for package cronie:  
 -------------------------------  
 Repository     : Main Repository (OSS)  
 Name           : cronie  
 Version        : 1.6.1-91.3  
 Arch           : x86_64  
 Vendor         : openSUSE  
 Installed Size : 310.2 KiB  
 Installed      : Yes (automatically)  
 Status         : up-to-date  
 Source package : cronie-1.6.1-91.3.src  
 Upstream URL   : https://github.com/cronie-crond/cronie  
 Summary        : Cron Daemon  
 Description    :  
     cron automatically starts programs at specific times. Add new entries  
     with "crontab -e". (See "man 5 crontab" and "man 1 crontab" for  
     documentation.)

     Under /etc, find the directories cron.hourly, cron.daily, cron.weekly,  
     and cron.monthly.  Scripts and programs that are located there are  
     started automatically.


 Information for package cronie-anacron:  
 ---------------------------------------  
 Repository     : Main Repository (OSS)  
 Name           : cronie-anacron  
 Version        : 1.6.1-91.3  
 Arch           : x86_64  
 Vendor         : openSUSE  
 Installed Size : 43.6 KiB  
 Installed      : Yes  
 Status         : up-to-date  
 Source package : cronie-1.6.1-91.3.src  
 Upstream URL   : https://github.com/cronie-crond/cronie  
 Summary        : Utility for running regular jobs  
 Description    :  
     Anacron becames part of cronie. Anacron is used only for running regular jobs.  
     The default settings execute regular jobs by anacron, however this could be  
     overloaded in settings.


 Information for package kcron:  
 ------------------------------  
 Repository     : Main Repository (OSS)  
 Name           : kcron  
 Version        : 23.04.3-1.1  
 Arch           : x86_64  
 Vendor         : openSUSE  
 Installed Size : 410.8 KiB  
 Installed      : No  
 Status         : not installed  
 Source package : kcron-23.04.3-1.1.src  
 Upstream URL   : https://www.kde.org  
 Summary        : Cron job configuration tool  
 Description    :  
     KCron allows you to change your cron jobs setup.  

(加上任何可能在https://software.opensuse.org/search?baseproject=ALL&q=cron我只是不知道要搜索什么)

答案1

一个不寻常的请求。但是,如果您不是搜索“每 5 分钟”和“每隔一分钟”的两个 cron 表达式,而是创建一个每分钟运行一个脚本的 cron 条目,并且该脚本决定是否是 5 分钟脚本的时间或其他。就像是:

* * * * * /home/username/script-manager.sh

#!/usr/bin/env sh
minute=$(date +%M)
if [ 0 = $(( ${minute#0} % 5 )) ]; then
  /home/username/modulo-5 clock-minutes
else
  /home/username/script_B
fi

如果你坚持认为它必须在相对于启动的 5 分钟步长内,你可以添加类似的内容

minute=$(date +%M)
echo "$(( ${minute#0} % 5 ))" > /run/boot-5-minute-offset

到您在启动时运行的脚本并调整决策脚本if [ "$(cat /run/boot-5-minute-offset)" = $(( ${minute#0} % 5 )) ]; then

相关内容