
Предположим, я создаю два файла crontab.
/tmp/my-crontab
/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 -
У меня это работает. Надеюсь, это поможет.