Oto inny jednoliniowy sposób, który pozwala uniknąć duplikatów
(crontab -l 2>/dev/null | fgrep -v "*/1 * * * * your_command"; echo "*/1 * * * * your_command") | crontab -
A oto sposób na odpowiedź JohnZ i uniknięcie no crontab for user
komunikatu lub jeśli musisz działać w set -eu
środowisku typu i nie możesz mieć nic zwracającego błąd (w takim przypadku 2>/dev/null
część jest opcjonalna):
( (crontab -l 2>/dev/null || echo "") ; echo "0 * * * * your_command") | sort -u - | crontab -
Lub jeśli chcesz podzielić rzeczy, aby były bardziej czytelne:
new_job="0 * * * * your_command"
preceding_cron_jobs=$(crontab -l || echo "")
(echo "$preceding_cron_jobs" ; echo "$new_job") | sort - | uniq - | crontab -
Lub opcjonalnie usuń wszelkie odniesienia do komendy twoja_polecenie (np. Jeśli harmonogram się zmienił, chcesz, aby był on kiedykolwiek cron'owany tylko raz). W tym przypadku już nie potrzebujemy uniq
(dodatkowy bonus, kolejność reklamowa jest również zachowana):
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 -