2

Как запустить 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

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

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

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

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

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

2

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .