crontab 运行部分

crontab 运行部分

我正在查看run-partsCentOS 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以使随机延迟成为全局默认值。

相关内容