У меня есть .sh, который выполняет команду. Я хочу использовать crontab -e и войти в файл @reboot /path/to/command.
Как выполнить это в одной команде, а не отдельно запускать crontab -e, а затем вручную вставить строку, а затем сохранить файл.
Когда вы используете crontab -e, файл будет создан в /var/spool/cron/crontabs/, имя которого будет равно вашему имени.
Так что просто перенаправьте нужную строку в этот файл:
echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER
, используя tee -a, мы говорим tee добавить @reboot /path/to/file.sh в конец этого файла, а не перезаписывать его. если его там нет, он будет создан. Вероятно, правильный способ сделать это - как описано в разделе «Как программно добавить новый файл crontab без замены предыдущего» - это выгрузить существующий crontab во временный файл, изменить его, а затем прочитать его обратно. Например: [ ! d0] 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 текст на одной строке.
right
Когда вы используете crontab -e, файл будет создан в /var/spool/cron/crontabs/, имя которого будет равно вашему имени.
Так что просто перенаправьте нужную строку в этот файл:
echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER
, используя tee -a, мы говорим tee добавить @reboot /path/to/file.sh в конец этого файла, а не перезаписывать его. если его там нет, он будет создан. Вероятно, правильный способ сделать это - как описано в разделе «Как программно добавить новый файл crontab без замены предыдущего» - это выгрузить существующий crontab во временный файл, изменить его, а затем прочитать его обратно. Например: [ ! d0] 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 текст на одной строке.
right