是否可以为 cron 守护进程执行的所有脚本分配 nice 和 ionice 优先级?

是否可以为 cron 守护进程执行的所有脚本分配 nice 和 ionice 优先级?

更具体一点:

我有一台 Debian Squeeze Linux 机器,上面有一个应该可以在全球范围内使用的 Web 应用程序。到目前为止,我每晚都会执行大量耗费资源的 cronjobs(在欧洲),但对区域用户体验没有太大影响。但现在我不能承受服务器随时变慢的后果。

有没有办法强制所有 cron 脚本(cron.daily 等)继承 nice 和 ionice 优先级?

感谢您的贡献!

米格尔

答案1

是的...

您可以让脚本获取一组特定的环境变量或者仅在脚本内部运行 nice/ionice...

然而,这并不是解决您的问题的好方法。

  • 您能否偏移或错开脚本以使它们不争用资源?
  • 您是否了解时间或系统活动模式?例如02:00 到 04:00 之间,系统上的用户很少,这是运行维护脚本的好时机。
  • 您的服务器上是否有足够的资源?
  • nice并且ionice不是好的长期解决方案。ionice事实上,它对一些基于性能的 Linux 内核调度算法没有影响。它与CFQ 调度器,但你很可能想使用截止期限调度器在服务器系统上。这可能比尝试在进程上强制使用 nice/ionice 产生更大的影响。

答案2

您可能希望将 crond 服务设置为在已设置 nice 和 ionice 的情况下运行。

http://b.zekjur.net/2012/09/23/systemd-ionice.html

但是,我还没有测试过这个,所以我无法保证这一点。

如果这不起作用,或者没有提供足够的帮助,您将需要配置 cgroups。

答案3

您可能最好让这些 cron 作业在单独的 Linux 用户下运行,您可以将其限制为较低的优先级。假设您有这样一个用户batchuser。在您的 中/etc/security/limits.conf,您可能希望为该用户添加一个条目(-19 到 19,其中 19 是最低优先级):

batchuser    -       priority        19

然后,此用户启动的任何进程(无论是否来自 cron)都将继承此优先级。无需修改脚本,也无需设置环境或配置文件。

http://manpages.debian.org/cgi-bin/man.cgi?query=limits.conf

相关内容