Answers:
at
如果at
已安装,机器正在运行atd
并且允许用户使用该命令,则具有用于此目的的更简单的界面。
例如(使用man at
或检查确切的语法info at
),
at -f
文件 now + 53 minutes
要么
at -f
文件 now + 2 hours
将分别在53分钟或2小时内在指定文件中运行命令。
at
然后可以在计划的作业开始时以合适的(随机或其他方式)开始,计数和时间单位重新运行。
编辑
正如Arjan在下面有帮助地指出的那样,如果您将它用于玩具应用程序以外的其他用途,则需要考虑诸如发生什么情况之类的问题
如果下一次运行在上一个运行完成之前开始(例如,脚本是否已重新进入?),或者
如果运行无法正确完成,或者
如果下一次运行根本无法或不能按时启动(例如,如果下一次运行应在启动时关闭机器,会发生什么),并且
有关失败或成功运行的日志记录和报告。
at
-command是第一行,并且脚本运行了很长时间(或者间隔很短),那么请注意不要同时运行多个实例。但是,当at
位于脚本的最后一行时,如果脚本失败,显然不会进行任何重新计划。同样,从命令行运行脚本也会使其本身重新计划(并且:然后可以同时存在多个计划)。并cron
支持通过电子邮件发送任何错误(或:一般输出);我不知道是否at
也有类似的东西?
我在/ etc / crontab中有很多命令可以执行各种操作,有些命令需要几秒钟的精度。现在,cron可以具有更好的分辨率,同时保持所有时间可见并集中。
本示例在每5分钟10到50秒之间获取并解析一个网页:
4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch
由于数据移动缓慢,它不必有确切的时间,但是通过不必等待网页,它有助于将单节点执行时间保持在尽可能低的水平。(该插件进一步将页面缓存了30分钟,以减少不必要的点击,但是需要每5分钟更新一次数据库)。
请注意,\%-cron用%代替“ \ n”-用于将邮件文本保持在一行上。
在内部cron
,我认为不存在这样的功能。我认为最好的解决方案是将命令放入外壳脚本中,并sleep
在脚本顶部放置一个随机间隔,然后使用$RANDOM
变量。然后每天在常规cron作业中运行一次脚本。
#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2
file
包含下一次at
运行,可以递归进行,对吗?