它经常发生共享服务器上的用户cron作业同时运行,并在竞争中陷入困境(接近我已经知道)。 所以加载爆炸,Nagios很生气,Apache停止响应,你不能SSH进去,因为它超时等我不能在一个位置,我可以单方面决定用户不能运行crons,但我想在pgrep crond | wc -l返回> 50时解决这个问题。
似乎应该可以通过限制在任何给定时间或类似运行的crond进程的数量(比如发送SIGSTOP,直到其中一些清除了更less的hacky)来错开它们,但是我还没有find任何好的线索。
硬件:4 CPU及以上,低端戴尔1435s〜8GB内存,RAID 10 WD EADS主要是Plesk和cPanel,但也有一些邪恶的Sphera系统。
你如何处理这个问题?
您可以使用cron.allow和cron.deny来限制用户对cron的访问,也可以使用PAM限制来限制CPU使用率,进程数量和类似的东西。 除此之外,解决scheme是创build一些东西来监视和处理用户的cron作业,因为cron并没有限制运行多less个作业。
我认为CPanel同时运行一些cron作业,但它是一个特定的工具(不确定)。
我认为你有这些问题之一:
没有足够的内存来同时运行crontabs。 你可以通过
高I / O。 你可以通过
ionice降低I / O优先级 尝试找出机器是否正在交换,如果在夜间不交换,则将cron I / O优先级更改为空闲:
sudo ionice -c 3 -p $(pgrep cron)
我总是随机安排cronjobs(尤其是分钟)。 我通常会看到在午夜运行的cron示例,如:
0 0 * * * /usr/bin/echo "Job ran"
如果你有很多定义这样的工作,你是在惹麻烦。 不幸的是,这些往往是长期运行的系统工作 我也倾向于在批处理窗口的不同时间安排工作。 (23至05)小时。
我喜欢Ubuntu上使用的新cron规范。 这有几个/etc/cron.*目录来指定要运行的作业。 他们顺序运行而不是并行限制负载。
您应该能够看到/etc/spool/cron/crontabs文件中的计划。 读取这些文件将需要root权限。 如果是导致问题的用户与他们讨论问题。
您还可以检查/var/log/syslog CRON条目以查看什么时候正在运行。