Назад | Перейти на главную страницу

Добавить в crontab, только если запись не существует

Я ищу программный способ добавления в crontab, только если запись не существует. Кроме того, код выхода должен быть 0 для обоих случаев, когда запись не существует или запись существует.

Я попытался:

(crontab -l -u root 2>/dev/null | grep -F -v "@reboot /usr/bin/mycommand" || true; echo "@reboot /usr/bin/mycommand 2>&1") | sudo crontab -u root -

(crontab -l -u root 2>/dev/null | grep -F -v "@reboot /usr/bin/mycommand_2" || true; echo "@reboot /usr/bin/mycommand_2 2>&1") | sudo crontab -u root -

Но второй по-прежнему отменяет все, что есть в crontab.

непроверенный, так что будьте осторожны

entries=( 
    "@reboot /usr/bin/mycommand"
    "@reboot /usr/bin/mycommand_2"
)
to_add=()
f=$(mktemp)

crontab -u root -l > "$f"
for entry in "${entries[@]}"; do
    grep -qF "$entry" "$f" || to_add+=( "$entry" )
done

{ cat "$f"; printf "%s\n" "${to_add[@]}"; } | crontab -u root "$f"
rm "$f"

Ваше решение распечатывает только новую запись. С помощью tee с заменой процесса будет включать исходный crontab плюс, возможно, новую запись:

crontab -l -u root 2>/dev/null | tee >(sh -c '
    grep -qF "@reboot /usr/bin/mycommand" || echo "@reboot /usr/bin/mycommand 2>&1"
') | sudo crontab -u root -