Можно ли ограничить количество ресурсов процессора для процессов, запускаемых из cron? Предыстория: у нас есть общий хостинг на Centos7, и клиенты могут создавать cronjobs через панель управления directadmin. Иногда эти cronjobs съедают весь процессор. Вот почему я хотел бы ограничить процессор для процессов, запускаемых cronjobs.
Я попытался:
# 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?
Кстати: почему он показывает 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
Похоже, что таймеры systemd могут быть ответом на то, что вам нужно, у systemd-таймеров есть встроенная поддержка cgroups, подробнее здесь: https://wiki.archlinux.org/index.php/Systemd/Timers
Если вы должны выполнить, используя cron, cgexec может быть билетом, это не для всех cronjobs, это должно быть специфично для команды, запущенной в cronjob. Больше информации здесь: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/starting_a_process