Aqui está outra maneira de uma linha, que evita duplicatas
(crontab -l 2>/dev/null | fgrep -v "*/1 * * * * your_command"; echo "*/1 * * * * your_command") | crontab -
E aqui está uma maneira de responder a JohnZ e evitar a no crontab for user
mensagem, ou se você precisar operar em um set -eu
ambiente de tipo e não puder fazer nada retornar uma falha (nesse caso, a 2>/dev/null
peça é opcional):
( (crontab -l 2>/dev/null || echo "") ; echo "0 * * * * your_command") | sort -u - | crontab -
Ou se você deseja dividir as coisas para que sejam mais legíveis:
new_job="0 * * * * your_command"
preceding_cron_jobs=$(crontab -l || echo "")
(echo "$preceding_cron_jobs" ; echo "$new_job") | sort - | uniq - | crontab -
Ou, opcionalmente, remova qualquer referência ao seu_command (por exemplo: se o agendamento foi alterado, você só deseja que ele seja programado uma vez). Nesse caso, não precisamos mais uniq
(bônus adicional, o pedido de inserção também é preservado):
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 -