Was ist der einfachste Weg, um ein Skript beim Booten in OS X ausführen zu lassen?

12

Ich möchte, dass ein Skript (bash / zsh / ruby ​​/ ...) beim Booten unter OS X ausgeführt wird. Was ist der einfachste Weg, dies zu tun, ohne mit XML- / Plist-Dateien herumzuspielen und vorzugsweise kein Meta-AppleScript zu erstellen .

John Bachir
quelle

Antworten:

7

MacOS X verwendet Vixie cron, das über spezielle Meta-Tags zum Starten beim Neustart verfügt. Das Dateiformat finden Sie in der Manpage .

etwas wie:

@reboot /path/to/script.sh

in Ihrem crontab würde funktionieren. Ich bin mir nicht sicher, ob dies eine bessere Lösung als Launchd ist. Sie haben wahrscheinlich mehr Meta-Tools, die Launchd als Cron betrachten.

Reiche Homolka
quelle
Ich liebe es, du hast mir das Gegenteil bewiesen :-) Obwohl es cronunter OS X nicht so gut ist, standardmäßig zu protokollieren (es gab erst vor ein paar Tagen ein Thema dazu).
Daniel Beck
Dies ist perfekt.
John Bachir
1
Beachten Sie, dass cron, at usw. in OS X teilweise veraltet sind. Ich kann in den verschiedenen Dokumenten keine explizite Aussage dazu finden und weiß auch nicht, wie aggressiv sie veraltet sind, aber launchd scheint im Allgemeinen bevorzugt zu sein. Eine Einführung finden Sie in der Startdokumentation .
Norman Gray
plist funktioniert bei mir nicht - das funktioniert wie ein Zauber - danke! :-D
BG Bruno
Ehrlich gesagt war ich mir nicht sicher, ob die Syntax unter OS X dieselbe sein würde.
NobleUplift
6

Falls Sie Ihre Meinung ändern:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.245713</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>UserName</key>
    <string>someuser</string>
</dict>
</plist>

Speichern Sie wie com.superuser.245713.plistin /Library/LaunchAgents/und machen Sie root:wheelden Eigentümer / die Gruppe.

Daniel Beck
quelle
1
Es ist wohl besser, es /Library/LaunchAgentseinzubauen, als /System/Library/LaunchDaemonsda /Systemes sich um betriebssystemspezifische Dinge handelt, und das unter /Librarywird eher für Dinge von Drittanbietern verwendet. Außerdem sollte LaunchDaemons"Elemente enthalten, die als Root ausgeführt werden, im Allgemeinen Hintergrundprozesse", wobei LaunchAgents"als Benutzer oder im Kontext von Userland ausgeführt werden". Die Quelle für diese Zitate ist ein großartiger Artikel über launchd , den ich bei Fragen zu launchd konsultiere.
Doug Harris
@DougHarris Danke für die Vorschläge! Ich muss zugeben, dass ich nur diese Ad-hoc-Eingabe getippt habe - während ich normalerweise meine Lösungen teste, war ich nicht bereit, meinen Computer dafür neu zu starten.
Daniel Beck
Das ist sehr schön, obwohl mir die Vixie Cron-Lösung besser gefällt :)
John Bachir
Eigentlich sollte es in / Library / LaunchDaemons abgelegt werden. Agenten werden nur innerhalb einer Benutzersitzung ausgeführt, dh sie werden erst ausgeführt (oder genauer gesagt, können ausgeführt werden), wenn sich jemand anmeldet. Sie werden jedes Mal erneut ausgeführt, wenn sich jemand anmeldet, und immer als aktuell angemeldeter Benutzer ausgeführt. Daemons werden beim Booten ausgeführt (/ können ausgeführt werden) und können, während sie normalerweise als Root ausgeführt werden, als ein anderer Benutzer mit dem Benutzernamen-Schlüssel ausgeführt werden.
Gordon Davisson
2
@ the0ther Das Web vergisst nicht.
Daniel Beck
2

Es gibt auch Anmelde-Hooks, wenn Sie möchten, dass das Skript (als Root) ausgeführt wird, wenn sich ein Benutzer anmeldet, anstatt wenn der Computer gestartet wird.

Deditos
quelle