Führen Sie den Befehl `sudo` beim Start / Bootup unter Mac OS X aus

5184
Basil Bourque

Wie sudoführe ich beim Start eines Mac eine Befehlszeile aus?

Im Einzelnen versuche ich, die folgende Zeile auf Mountain Lion auszuführen:

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

Es gibt noch weitere Fragen zum Ausführen von Befehlszeilentools beim Start (wie hier ), aber sie behandeln nicht das Problem sudound die erforderlichen Administratorberechtigungen / das erforderliche Kennwort.

Andere Fragen und Antworten werden diskutiert launchd, aber dies scheint für Daemon-Prozesse zu gelten, die im Falle eines Absturzes überwacht und erneut gestartet werden müssen. Im Gegensatz dazu versuche ich einfach einmalig zu sein, diese eine Zeile einmal beim Start auszuführen.

Wenn sich die Dinge im Laufe der Jahre geändert haben, wäre es schön, beim Start auf älteren Mac OS X-Versionen wie Mountain Lion und neueren Versionen wie Yosemite / El Capitan ein Sudo auszuführen.

2

2 Antworten auf die Frage

3
Schwertspize

Obwohl launchd und der Begriff LaunchDaemon wie Dämonen klingt, ist es der bevorzugte Weg, alles zu automatisieren. Apfel sagt in seiner Dokumentation,

Anmelde- und Abmeldeskripts sind eine veraltete Technologie. In den meisten Fällen sollten Sie stattdessen startd-Jobs verwenden, wie in Erstellen von Daemons und Agents starten beschrieben

Anmelde- und Abmeldeskripts sind Skripts, die einmal ausgeführt werden sollten und dann enden sollten. Sie werden vom Anmeldefenster ausgelöst.

Ich denke, es ist der richtige Weg, wenn Sie Ihren Befehl in eine Datei mit dem Startbefehl setzen. Erstens können Sie Startagenten ausschließen, da diese immer als Benutzer ausgeführt werden. Da Sie möchten, dass das Skript als Root ausgeführt wird, sollten Sie es unter root ablegen /Library/LaunchDaemons( /System/Library/LaunchDaemonswürde auch funktionieren, aber System ....) und das Flag hinzufügen, RunAtLoadaber nicht setzen KeepAlive(oder es auf etwas wie abgestürzt setzen, siehe diese gute Dokumentation ).

BEARBEITEN, da das Skript als root ausgeführt wird. Sie könnten das weglassen sudo. Eine andere Option wäre, ein Skript zu erstellen und es in /etc/sudoers( visudo) mit dem nopasswdFlag aufzunehmen und als Benutzer auszuführen

2
fredrikhl

Diese Frage hat einige gute Antworten auf apple.stackexchange.com .

cronist wahrscheinlich am einfachsten einzurichten; @reboot /path/to/scriptWenn Sie den speziellen Eintrag in der Crontab-Datei verwenden, wird Ihr Cronjob nur beim Start ausgeführt. In der oben verlinkten Frage gibt es eine Antwort darauf .

launchdist hier wahrscheinlich die richtige lösung. Sie können damit auch einmalige Befehle und Skripts ausführen. Eine der anderen Antworten in der oben verlinkten Frage befasst sich mit der Erstellung einer PropertyList-Datei. Beachten Sie, dass die PropertyList unter /Library/LaunchDaemonsals Root platziert werden muss .