Я ищу программный способ добавления в 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 -