У меня есть .sh, который выполняет команду. Я хочу использовать crontab-e и ввести в файл @reboot/path/to/command.
Как действительно выполняются, это в одной команде вместо того, чтобы отдельно выполнить crontab-e затем вручную вставляет строку и затем сохранить файл.
Когда Вы будете использовать crontab -e
, файл будет создан в /var/spool/cron/crontabs/
, который его имя равно Вашему uesername.
Поэтому просто перенаправляют Вашу желаемую строку в этот файл:
echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER
tee -a
мы говорим tee
добавлять @reboot /path/to/file.sh
в конце этого файла вместо того, чтобы перезаписать его. Вероятно, право способ сделать это - как объяснено в , Как программно добавить, новый crontab файл, не заменяя предыдущий один - должен вывести существующий crontab во временный файл, изменить его, затем читать, это въезжает задним ходом. Например:
cmd='@reboot /path/to/file'
tmpfile=$(mktemp) && crontab -l > "$tmpfile"
cmd='@reboot /path/to/command'
grep -Fxq "$cmd" "$tmpfile" || echo "$cmd" >> "$tmpfile"
crontab "$tmpfile" && rm -- "$tmpfile"
А "quick'n'dirty" опция - если бы Вы не заботитесь о проверке - был бы
crontab -l | sed '$a@reboot /path/to/command' | crontab -
принятие GNU sed, который позволяет a
ppend текст на одной строке.
Примечание: в отличие от записи в /var/spool/cron/crontabs
непосредственно, для этого подхода не нужно sudo
(потому что crontab
setuid).