Ось ще один однолінійний спосіб, який дозволяє уникнути дублікатів
(crontab -l 2>/dev/null | fgrep -v "*/1 * * * * your_command"; echo "*/1 * * * * your_command") | crontab -
Ось спосіб зробити відповідь JohnZ і уникнути no crontab for user
повідомлення, або якщо вам потрібно працювати в типовому set -eu
середовищі і нічого не може повернути помилку (у такому випадку 2>/dev/null
деталь не є обов'язковою):
( (crontab -l 2>/dev/null || echo "") ; echo "0 * * * * your_command") | sort -u - | crontab -
Або якщо ви хочете розділити речі так, щоб вони були більш зрозумілими:
new_job="0 * * * * your_command"
preceding_cron_jobs=$(crontab -l || echo "")
(echo "$preceding_cron_jobs" ; echo "$new_job") | sort - | uniq - | crontab -
Або необов'язково видаліть будь-які посилання на your_command (наприклад: якщо графік змінився, ви хочете, щоб він колись був закреслений один раз). У цьому випадку ми більше не потребуємо uniq
(додається бонус, порядок вставки також зберігається):
new_job="0 * * * * your_command"
preceding_cron_jobs=$(crontab -l || echo "")
preceding_cron_jobs=$(echo "$preceding_cron_jobs" | grep -v your_command )
(echo "$preceding_cron_jobs" ; echo "$new_job") | crontab -