Запустите команду `sudo` при запуске / загрузке в Mac OS X

5182
Basil Bourque

Как запустить в sudoкомандной строке при запуске Mac?

В частности, я пытаюсь запустить следующую строку на Mountain Lion:

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in 

Есть и другие вопросы о запуске инструментов командной строки при запуске (например, это ), но они не решают проблему sudoи необходимые права администратора / пароль.

Обсуждаются другие вопросы и ответы launchd, но, похоже, это относится к процессам демона, которые необходимо отслеживать и перезапускать в случае сбоя. Напротив, я просто пытаюсь сделать одноразовый запуск этой строки один раз при запуске.

Если за прошедшие годы все изменилось, было бы неплохо запустить sudo при запуске на обеих старых версиях Mac OS X, таких как Mountain Lion, а также на новых, таких как Yosemite / El Capitan.

2

2 ответа на вопрос

3
Schwertspize

Хотя launchd и термин LaunchDaemon звучат как демоны, это предпочтительный способ автоматизации всего сущего. яблоко говорит в своей документации,

Сценарии входа и выхода являются устаревшей технологией. В большинстве случаев вам следует использовать задания запуска, как описано в разделе Создание демонов запуска и агентов

сценарии входа в систему и выхода из системы - это сценарии, которые должны выполняться один раз, а затем завершаться. они запускаются через окно входа в систему.

Я думаю, что размещение вашей команды в файле launchd plist является правильным способом сделать это. Во-первых, вы можете исключить агенты запуска, потому что они всегда будут работать от имени пользователя. поскольку вы хотите, чтобы скрипт выполнялся от имени пользователя root, вы должны поместить его в /Library/LaunchDaemons( /System/Library/LaunchDaemonsэто также будет работать, но система ....) и добавить флаг, RunAtLoadно не устанавливать его KeepAlive(или установить для него что-то вроде crash, см. эту хорошую документацию ).

РЕДАКТИРОВАТЬ, потому что скрипт выполняется от имени пользователя root, вы можете опустить sudo, другой вариант, создать скрипт и включить его в /etc/sudoers( visudo) с nopasswdфлагом и запустить его как пользователь

2
fredrikhl

На этот вопрос есть несколько хороших ответов на apple.stackexchange.com .

cronвероятно, самый простой в настройке; с помощью специальной записи @reboot /path/to/scriptв файле crontab ваш cronjob будет работать только при запуске. Есть ответ о том, как это сделать, в вопросе, связанном выше.

launchdэто, вероятно, правильное решение здесь. Вы также можете использовать его для запуска одноразовых команд и скриптов. Один из других ответов в вопросе, связанном выше, касается того, как написать файл PropertyList для этого. Обратите внимание, что PropertyList должен быть размещен /Library/LaunchDaemonsдля запуска от имени пользователя root.

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