(У мене недостатньо репутації для коментарів, тому я додаю як відповідь: сміливо додайте це як коментар поруч із його відповіддю)
Один лайнер Джо Касадонте є ідеальним, за винятком випадків, коли ви працюєте з set -e
, тобто якщо ваш сценарій встановлений на помилку, і якщо ще немає кронштейнів. У цьому випадку однолінійний НЕ створить cronjob, але НЕ зупинить сценарій. Мовчазний збій може бути дуже оманливим.
Причина полягає в тому, що crontab -l
повертається з 1
кодом повернення, внаслідок чого наступна команда (the echo
) не виконується ... таким чином, cronjob не створюється. Але оскільки вони виконуються як підпроцес (через дужки), вони не зупиняють сценарій.
(Цікаво, що якщо ви знову запустите ту саму команду, вона буде спрацьовувати: коли ви виконали crontab -
один раз, crontab -l
все одно нічого не виводиться, але більше не повертається помилка (повідомлення ви більше не отримуєте no crontab for <user>
).echo
виконується і crontab створений)
У будь-якому випадку, якщо ви працюєте з set -e
, рядок повинен бути:
(crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/job -with args") | crontab -