我有一个想要定期运行的命令,即以固定的时间间隔(比如每天一次)运行。
据我所知,通常的方法是使用 cron。这需要我在特定时间(例如每天午夜)安排任务。但是,就我而言,目标机器并非持续运行,因此它可能不会每天在预定的时间运行。
因此,我正在寻找某种后台服务,该服务使用自上次命令调用以来经过的时间而不是特定时间来决定是否执行该命令。
例如,假设最后一次执行命令是在两天前的中午,之后机器被关闭。现在机器自那时以来第一次重新启动。守护进程注意到自上次调用以来已经过去了一天多的时间,并运行命令(无论当前时间是多少)。如果机器此后至少继续运行 24 小时,则该命令将在 24 小时后再次执行。
显然,我可以将某些东西组合在一起,让 cron 更频繁地调用它并自行执行必要的检查,但我想知道是否存在针对此类问题的现成解决方案。
答案1
您可以anacron
在Linux系统上使用。
/etc/anacrontab
创建一个包含以下内容的文件:
# period delay job-identifier command
7 2 cron.weekly mycommand
如果mycommand
在过去 7 天内没有运行过,它会等待 2 分钟,然后运行命令。Anacron
作业由 crond 运行,对于在不总是开机的机器(例如笔记本电脑)上执行定期作业非常有用。只有超级用户可以安排 anacron 作业,其粒度为一天(而 cron 作业为一分钟)。
指定 anacron 作业的最后一次执行将保存在文件中/var/spool/anacron/job_id
。
答案2
使用 anacron,它能完全满足你的需要,它的作用类似于 cron,适用于非 24 x 7 全天候运行的计算机