是否可以限制从 cron 启动的进程的 CPU 份额?背景:我们在 Centos7 上共享主机,客户可以通过 directadmin 控制面板制作 cronjobs。有时这些 cronjobs 会占用所有 CPU。这就是为什么我想限制由 cronjobs 启动的进程的 CPU。
我试过:
# systemctl set-property crond.service CPUShares=500
但是从 cron 启动的作业似乎转到 user.slice:/user.slice/user-1003.slice/session-283630.scope
# systemctl show session-283630.scope -p CPUShares
CPUShares=18446744073709551615
因此看起来它没有继承 cpushares。
是否可以限制 cronjobs 的 CPU 份额?
顺便问一下:为什么它显示 CPUShares=18446744073709551615 而不是 CPUShares=1024?当我检查 /sys/fs/cgroup/cpu,cpuacct/user.slice/user-0.slice/cpu.shares 时,它显示 1024:
# cat /sys/fs/cgroup/cpu,cpuacct/user.slice/user-0.slice/cpu.shares
1024
但是 systemctl 显示 CPUShares=18446744073709551615:
# systemctl show user-0.slice -p CPUShares
CPUShares=18446744073709551615
答案1
看起来 systemd 计时器可能是您需要的答案,systemd-timers 对 cgroups 有原生支持,更多信息请点击此处:https://wiki.archlinux.org/index.php/Systemd/Timers
如果您必须使用 cron cgexec 执行,这可能是问题所在,但这并不适用于所有 cronjob,这必须特定于 cronjob 中运行的命令。更多信息请参见此处:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/starting_a_process