也许我完全疯了,如果是这样 - 那很好。但是我将如何安排工作以随机安排广播一条愚蠢的消息,例如 from fortune?
澄清
是 - 这是我的个人工作站 - 不打算在生产服务器上做一些不稳定的事情:)
mas*_*mas 13
at如果at已安装,机器正在运行atd并且允许用户使用该命令,则具有用于此类目的的更简单的界面。
例如(使用man at或检查确切的语法info at),
at -f 文件 now + 53 minutes
或者
at -f 文件 now + 2 hours
将分别在 53 分钟或 2 小时内运行指定文件中的命令。
at 然后可以在计划作业开始时使用合适的(随机或其他)开始、计数和时间单位重新运行。
编辑
正如 Arjan 在下面很有帮助地指出的那样,如果您将它用于玩具应用程序以外的其他应用程序,则需要考虑诸如会发生什么的问题
如果下一次运行在前一次运行完成之前开始(例如脚本是否可重入?)或
如果运行未能正确完成或
如果下一次运行完全或无法按时开始(例如,如果在下一次运行即将开始时机器关闭会发生什么)和
关于失败或成功运行的日志记录和报告。
And*_*son 13
我在 /etc/crontab 中有很多命令可以做各种各样的事情,有些需要几秒钟的精确度。现在 cron 可以有更精细的分辨率,同时保持所有时间可见和集中。
此示例在每 5 分钟之前的 10 到 50 秒之间获取并解析一个网页:
4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch
Run Code Online (Sandbox Code Playgroud)
由于数据移动缓慢,它不必有确切的时间,但它有助于通过不必等待网页来尽可能降低 munin 节点的执行时间。(该插件进一步缓存页面 30 分钟以减少不必要的点击,但需要每 5 分钟更新一次数据库)。
注意 \% — cron 用 % 替换了 "\n" — 用于将邮件文本保持在一行上。
在内部cron,我认为不存在这样的功能。我认为最好的解决方案是将您的命令放入 shell 脚本中,并sleep在脚本顶部放置一个随机间隔并使用该$RANDOM变量。然后在常规 cron 作业中每天运行一次脚本。
#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2
Run Code Online (Sandbox Code Playgroud)
这将取决于您所追求的间隔类型。但让我们假设您希望脚本以 1:30 的概率随机运行(每 30 分钟一次)
为周期构建您的 cron 脚本,例如 10 分钟。它将每 30 分钟发射 3 次。
在脚本中使用rand作为if语句的条件。您希望 rand 返回一个介于 0 和 2 之间的数字。如果它是 0,则执行 if 语句的内容。
本质上,您的脚本总是以设定的时间间隔触发。但只会随机执行您感兴趣的命令。您的服务提供商会感谢您。