Я хочу централизовать множество крон в / etc / crontab. Теперь у каждого пользователя есть собственные кроны в / var / spool / cron, что для меня не обслуживается. Я хочу сделать это автоматически с помощью сценария, но проблема в том, что синтаксис cron отличается. В / etc / crontab должен быть указан пользователь. Как я могу выполнить эту задачу эффективно?
Вы можете начать с чего-то вроде:
while read user;
do crontab -l -u $user >> usersTabs;
done < <(awk -F: '{print $1}' /etc/passwd )
Это действительно зависит от того, хотите ли вы, чтобы они запускались от имени того же пользователя, которым были раньше?
Если мой Google верен, разница в формате:
* syntax:
* user crontab:
* minutes hours doms months dows cmd\n
* system crontab (/etc/crontab):
* minutes hours doms months dows USERNAME cmd\n
Предполагая, что у вас есть выходные данные из пользовательских crontab в папке, вы можете сделать что-то вроде:
find . -type f -print0 | xargs -0 -e perl -pe "s/((\w+\s+){5})(.*)/\1USERNAME \3/;"
Я не знаю, имеет ли смысл этот вывод crontab для вас, поэтому проверьте его еще раз. Вероятно, можно будет сделать этот сценарий еще проще с помощью улучшенного Perl или другого инструмента, такого как awk или sed, но я не могу вспомнить синтаксис прямо сейчас.