我想将大量的 cron 集中到 /etc/crontab。现在每个用户在 /var/spool/cron 中都有自己的 cron,这对我来说难以维护。我想通过脚本自动完成此操作,但问题是 cron 语法不同。在 /etc/crontab 中必须声明用户。我如何才能高效地完成这项任务?
答案1
你可以从类似这样的内容开始:
while read user;
do crontab -l -u $user >> usersTabs;
done < <(awk -F: '{print $1}' /etc/passwd )
这确实取决于您是否希望他们以之前相同的用户身份运行?
答案2
如果我的谷歌是正确的,格式的区别是:
* syntax:
* user crontab:
* minutes hours doms months dows cmd\n
* system crontab (/etc/crontab):
* minutes hours doms months dows USERNAME cmd\n
假设您在文件夹中拥有来自用户 crontabs 的输出,您可以执行以下操作:
find . -type f -print0 | xargs -0 -e perl -pe "s/((\w+\s+){5})(.*)/\1USERNAME \3/;"
我不知道这个 crontab 输出对你来说是否有意义,所以请仔细检查一下。使用更好的 perl 或使用其他工具(如 awk 或 sed)应该可以使这个脚本更简单,但我现在记不清语法了。