Может ли один пользователь иметь несколько файлов crontab?

Может ли один пользователь иметь несколько файлов crontab?

Предположим, я создаю два файла crontab.

  1. /tmp/my-crontab
  2. /root/my-alternate-crontab

Каждый файл crontab запланирован для запуска различных скриптов.

Когда я запускаю cronjob, первый заменяется на старый.

crontab -u smarak /tmp/my-crontab
crontab -u smarak /root/my-alternate-crontab

Возможно ли это для одного пользователя?

решение1

Два способа обойти проблему наличия одного файла crontab.

Поместите записи crontab в файлы в каком-нибудь каталоге, например ~/crontab.d/thisandthat.cron, , а затем зафиксируйте все изменения из них в системном crontab с помощью:

cat ~/crontab.d/*.cron | crontab -

Расширение .cronнеобходимо для того, чтобы избежать случайного включения резервных файлов из редакторов. Обратите внимание, что поскольку все файлы объединены вместе, любые переменные, заданные в файлах, будут также применяться к файлам, которые появятся позже.

Вы также можете сделать что-то похожее на то, как /etc/cron.hourlyи друзья реализованы в Debian. Основной /etc/crontabсодержит такие правила:

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

Вы можете организовать одну запись в crontab для запуска нескольких программ. В Debian run-parts dirвсе похоже, за for f in dir/* ; do "$f" ; doneисключением того, что он пропускает странные имена файлов, опять же, чтобы избежать запуска файлов резервных копий, созданных редакторами и т. д.

решение2

Нет. У каждого пользователя есть один crontab. Почему? Потому что crontab — это «таблица» («вкладка») всех заданий cron, связанных с одним пользователем.

Если вы хотите запустить несколько задач с помощью cron, просто добавьте несколько строк в свой crontab.

Если у вас есть несколько файлов со спецификациями заданий cron, просто объедините их:

cat crontab1 crontab2 crontab3 >my-crontab
crontab my-crontab

решение3

Вы можете просто прочитать фактическую запись и добавить новую сразу после нее.
Как только вы запустите эту:

crontab -u smarak /tmp/my-crontab

В идеале вы могли бы сделать что-то вроде:

crontab -u smarak <(cat /root/my-alternate-crontab) <(crontab -l)

Но, похоже, crontab не принимает указанную выше форму, поэтому вот обходной путь:

cat /root/my-alternate-crontab <(crontab -l)| crontab -u smarak -

У меня это работает. Надеюсь, это поможет.

Связанный контент