我的服务器上有很多用户使用完全相同的 cron 计划,这导致服务器负载过高。我们可以避免这种情况吗?
例如,如果有 x 个用户使用以下 cron 计划:0 1 * * *
,是否可以防止未来的用户使用相同的 cron 计划?
答案1
您可以分配计划任务每个用户帐户计划:
crontab -e -u user
答案2
为什么不简单地编写一个脚本来比较所有用户的 cron 文件,如果它们发生冲突,则将其移至下一个?如果在多个 crontab 中发现此问题,则0 1 * * *
针对每个存在的冲突更改移动分钟数5 1 * * *
。10 1 * * *
然后只需在根 crontab 中运行此脚本,以便它经常自动更改用户 crontab。
如果用户的 cron 任务在他们指定的时间运行至关重要,那么你必须考虑使用PAM 限制。
答案3
如果您的用户只是想执行夜间任务,那么基于运行 ~/nightly.sh 的解决方案可能会更简单。
然后,您将一个接一个地运行“/home/*/nightly.sh”。当然,您必须在合理的环境中以自己的权限运行每个用户的脚本(cron 会执行这些操作)。
但它可能相当简单。例如:
for user in user0 user1 user2 user3 ...
do
script=/home/$user/nightly.sh
[ -x $script ] || continue
sudo -u $user 2>&1 | mail -s "nightly.sh" $user
done