有什么办法来防止用户cron作业粉碎服务器?

它经常发生共享服务器上的用户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.allowcron.deny来限制用户对cron的访问,也可以使用PAM限制来限制CPU使用率,进程数量和类似的东西。 除此之外,解决scheme是创build一些东西来监视和处理用户的cron作业,因为cron并没有限制运行多less个作业。

我认为CPanel同时运行一些cron作业,但它是一个特定的工具(不确定)。

我认为你有这些问题之一:

  • 没有足够的内存来同时运行crontabs。 你可以通过

    • 增加更多的RAM
    • 限制用户可以分配的最大内存
    • 重新安排作业以减less并发作业的数量 – 您可能需要更换crond并使用不同的调度程序
  • 高I ​​/ O。 你可以通过

    • ionice降低I / O优先级
    • 重新安排作业以减less并发作业的数量

尝试找出机器是否正在交换,如果在夜间不交换,则将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条目以查看什么时候正在运行。