我正在查看run-parts
CentOS 7 上的脚本。与此非常相似:
https://github.com/ikysil/run-parts/blob/master/run-parts
它似乎cron.hourly
按顺序运行 etc. 目录中的所有内容,并具有 1 到 300 秒之间的随机延迟。
我有很多脚本cron.hourly
必须为我独特的设置运行。我希望它们全部同时运行,但在每个之前有随机延迟。
就像是:
directory_script_list = contents(/etc/cron.hourly)
for script in directory_script_list:
if script_is_executeable(script):
execute(sleep(random(1, 300)) && script) &)
我不希望服务器在它们命中时每小时都被淹没,我也不希望其中一个脚本阻塞其他脚本。
这些脚本不会使用太多的 CPU 负载,它们主要做的是查询回复缓慢的 SNMP 设备,其中有很多设备并且以多种方式查询。有些需要很长时间才能完成,有些则非常快。网络流量也不是很多。目前大约有 30 个脚本,但我经常添加、更新和删除它们。
有谁知道有这样的东西存在吗?
答案1
由于 run-parts 非常接近您想要的内容,因此您可以复制 run-parts 并对其进行修改,使其完全符合您的需求。
例如:
# cp -a /usr/bin/run-parts /usr/local/bin/run-parts-parallel
然后在 /usr/local/bin/run-parts-parallel 中的最后一个“fi”后面添加一个“&”,如您在此差异中所见:
# diff -u /usr/bin/run-parts /usr/local/bin/run-parts-parallel
--- /usr/bin/run-parts 2014-06-09 18:14:31.000000000 -0400
+++ /usr/local/bin/run-parts-parallel 2017-02-03 14:55:11.327000000 -0500
@@ -95,7 +95,7 @@
{ print; }'
logger -i -p cron.notice -t "run-parts($1)" "finished $(basename $i)"
fi
- fi
+ fi &
done
exit 0
然后您可以更改以下行/etc/cron.d/0hourly
:
01 * * * * root run-parts /etc/cron.hourly
到
01 * * * * root RANDOMIZE=1 RANDOMTIME=300 /usr/local/run-parts-parallel /etc/cron.hourly
还可以修改该脚本以用于/etc/sysconfig/run-parts-parallel
设置 RANDOM* 变量并将它们从 crontab 文件中删除。或者,如果您不在其他地方使用运行部件,则可以放入 RANDOM* 变量/etc/sysconfig/run-parts
以使随机延迟成为全局默认值。