Ich nehme an, es gibt ein Verzeichnis in System/Library für Startobjekte: StartupItems
Ich brauche ein Shell-Skript, das die Ethernet-Schnittstelle beim Start konfiguriert, mit lokaler Netzwerkadresse und Subnetzmaske. Ich muss dies tun, da die Netzwerkeinstellungen zum Konfigurieren der Ethernet-Schnittstelle diese NICHT mit manuellen Einstellungen festlegen. Dies scheint ein schwerwiegender Fehler zu sein, oder meine Installation ist fehlerhaft.
Mir wurde geraten, networksetup über die Befehlszeile zu verwenden, aber das konfiguriert die Ethernet-Schnittstelle nicht so, dass die Konfigurationen beim Neustart vorhanden sind.
Das Skript muss seine Arbeit mit Root-Rechten oder mit sudo erledigen, aber ich gehe davon aus, dass bei Verwendung von sudo beim Booten ein Passwortdialog angezeigt wird, wenn der Boot-Prozess zu diesem Skript gelangt.
(Ich habe genug Erfahrung mit FreeBsd und Linux, um mich im Terminal zurechtzufinden, aber nicht unbedingt, wie es für Mac OSX gilt.)
Eine Möglichkeit wäre, dem Skript einen launchd-Dienst zuzuweisen:
Erstellen Sie das Shell-Skript wie gewohnt. Dann können Sie einen launchd-Dienst erstellen, um ihn beim Start auszuführen. Diese befinden sich in /Library/LaunchDaemons
. Diese liegen im XML-Eigenschaftslistenformat vor. Erstellen Sie ein weiteres und füllen Sie es mit etwas wie dem folgenden:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.app</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/path/to/script</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
Ändern Sie com.example.app
, /bin/sh
und /path/to/script
nach Bedarf.
Das Skript wird dann ausgeführt, während das System hochfährt. Wenn es zu früh ausgeführt wird, können Sie entweder das Skript schreiben, um zu versuchen, das zu tun, was es tun muss, bis es erfolgreich ist, oder es mit einem Fehlercode ungleich Null beenden und dies der Eigenschaftenliste vor der </dict>
Zeile hinzufügen:
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
Wenn Sie mehr über OS X-Startdämonen und -dienste erfahren möchten, schlage ich vor, hier nach einer netten Kurzreferenz zu deren Erstellung zu suchen, oder hier nach einer umfassenderen Referenz darüber, was launchd tun kann.
Vor einiger Zeit habe ich cron verwendet, um genau das zu tun. So können Sie einen Eintrag vornehmen
@reboot /path/to/my/script
Anstelle der ersten fünf Felder kann eine von acht speziellen Zeichenfolgen erscheinen:
string meaning
------ -------@reboot ------@reboot
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
cron
ist heutzutage nicht der richtige Weg, dies unter OS X zu tun. Verwenden Sie stattdessen LaunchAgent oder LaunchDeamon (launchd). Weitere Informationen: developer.apple.com/library/mac/documentation/MacOSX/Conceptual/… Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.
cron
ist jedoch viel einfacher zu konfigurieren als launchd
. Vergleichen Sie einfach die beiden Antworten in diesem Thread, um zu sehen, was ich meine. cron
dauert eine einzelne Zeile in einer einzelnen Datei, in launchd
der ein Skript benötigt wird, um das Skript zu beschreiben, das beim Booten ausgeführt werden soll.Sehen Sie sich das Login-Hook-Skript an.
https://wiki.afp548.com/index.php/Login/Logout_Hooks_in_OS_X
JeffK
andonüsse
andonüsse
Jon Brooks
<key>Program</key>
mit dem Wert<string>/bin/sh</string>
und dann<key>ProgramArguments</key>
sollte nur noch der Wert stehen<string>/path/to/script</string>
Jon Brooks
<key>ProgramArguments</key>
Muss ein Array sein.