Aquí hay otra forma de una línea, que evita duplicados
(crontab -l 2>/dev/null | fgrep -v "*/1 * * * * your_command"; echo "*/1 * * * * your_command") | crontab -
Y aquí hay una manera de responder a JohnZ y evitar no crontab for user
mensajes, o si necesita operar en un set -eu
entorno de tipo y no puede hacer que nada devuelva una falla (en cuyo caso la 2>/dev/null
parte es opcional):
( (crontab -l 2>/dev/null || echo "") ; echo "0 * * * * your_command") | sort -u - | crontab -
O si desea dividir las cosas para que sean más legibles:
new_job="0 * * * * your_command"
preceding_cron_jobs=$(crontab -l || echo "")
(echo "$preceding_cron_jobs" ; echo "$new_job") | sort - | uniq - | crontab -
O, opcionalmente, elimine cualquier referencia a your_command (por ejemplo: si la programación ha cambiado, solo desea que se cronometre una vez). En este caso ya no necesitamos uniq
(bonificación adicional, el orden de inserción también se conserva):
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 -