Как запускать команды без sudo при запуске Ubuntu

У меня есть приведенная ниже команда, которую я должен запускать вручную каждый раз, когда машина Ubuntu запускается или перезагружается.

ngrok start --all

Эта команда может быть запущена только без sudo . Если я запустил его как sudo ngrok start --all , он выдаст ошибку. Из-за этого я не могу создать сценарий, который можно запустить как службу systemd , чтобы служба автоматически запускалась при каждой загрузке, выполняла сценарий и запускалась команда.

Я также пробовал crontab , добавляя строку ниже к sudo crontab -e , но это тоже не сработало.

@reboot ngrok start --all

Как запустить указанную выше команду без sudo при запуске Ubuntu. Может ли кто-нибудь помочь. Спасибо

0
задан 10 May 2021 в 19:20

2 ответа

В то время он уже работает с привилегиями root, поэтому нет необходимости использовать sudo . Просто запустите его без него.

Вам нужно только sudo , когда вы вошли в систему, и программа запускается под вашей учетной записью с меньшими правами; sudo дает такой программе привилегии root. Процессы, запущенные во время запуска системы или в crontab (root), уже запущены от имени root.

Есть даже решение, как запустить это как системный модуль:

https: // github.com / vincenthsu / systemd-ngrok

1
ответ дан 28 July 2021 в 11:42

Использование @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 ), который настраивает среду, а затем вызывает нужную программу.

0
ответ дан 28 July 2021 в 11:42

Другие вопросы по тегам:

Похожие вопросы: