У меня есть приведенная ниже команда, которую я должен запускать вручную каждый раз, когда машина Ubuntu
запускается или перезагружается.
ngrok start --all
Эта команда может быть запущена только без sudo
. Если я запустил его как sudo ngrok start --all
, он выдаст ошибку. Из-за этого я не могу создать сценарий, который можно запустить как службу systemd
, чтобы служба автоматически запускалась при каждой загрузке, выполняла сценарий и запускалась команда.
Я также пробовал crontab
, добавляя строку ниже к sudo crontab -e
, но это тоже не сработало.
@reboot ngrok start --all
Как запустить указанную выше команду без sudo
при запуске Ubuntu. Может ли кто-нибудь помочь. Спасибо
В то время он уже работает с привилегиями root, поэтому нет необходимости использовать sudo
. Просто запустите его без него.
Вам нужно только sudo
, когда вы вошли в систему, и программа запускается под вашей учетной записью с меньшими правами; sudo
дает такой программе привилегии root. Процессы, запущенные во время запуска системы или в crontab (root), уже запущены от имени root.
Есть даже решение, как запустить это как системный модуль:
Использование @reboot
в вашем crontab
является подходящим вариантом, но есть кое-что, что вам следует знать о заданиях, выполняемых через cron
:
Задания, выполняемые через cron
, или в
, или пакет
, не выполняются та же среда выполнения, что и на вашем рабочем столе. Ни одно из изменений вашего PATH
или других настроек переменных среды не распространяется автоматически на ваше задание cron
. Например, нет $ DISPLAY
, поэтому программы с графическим интерфейсом требуют особого обращения (прочтите man xhost
).
Можно установить переменные среды для всех заданий cron
в файле crontab
Прочитать man 5 crontab
.
Посмотрите результаты echo "=== set ==="; set; echo "=== env ==="; env | sort; echo "=== alias ==="; alias
в каждой из ваших сред.
Поскольку команда
в строке crontab
по умолчанию интерпретируется как / bin / sh
, синтаксис которого проще, чем у / bin / bash
, я рекомендую использовать команду
как вызов сценария bash
(исполняемый, смонтированный, начинается с #! / bin / bash
), который настраивает среду, а затем вызывает нужную программу.