Назад | Перейти на главную страницу

Преобразование пользовательских крон в системные кроны

Я хочу централизовать множество крон в / 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, но я не могу вспомнить синтаксис прямо сейчас.