Qual è il modo più semplice per eseguire uno script all'avvio in OS X?


12

Voglio uno script (bash / zsh / ruby ​​/ ...) da eseguire all'avvio in OS X. Qual è il modo più semplice per farlo, senza fare confusione con i file xml / plist e preferibilmente non è necessario creare un meta AppleScript .

Risposte:


7

MacOS X utilizza Vixie cron, che ha speciali metatag da avviare al riavvio. Vedi la pagina man per il formato del file.

qualcosa di simile a:

@reboot /path/to/script.sh

nel tuo crontab funzionerebbe. Non sono sicuro che questa sia una soluzione migliore di launchd, probabilmente hai più meta strumenti che guardano a launchd che a cron.


Adoro, mi hai dimostrato di sbagliare :-) Anche se cronsu OS X non è eccezionale con la registrazione di default (c'era un argomento su questo solo pochi giorni fa).
Daniel Beck

questo è perfetto.
John Bachir,

1
Nota che cron, at e così via sono in una certa misura deprecati in OS X. Non riesco a trovare un'affermazione esplicita nei vari documenti, né so quanto siano deprecati in modo aggressivo, ma launchd sembra generalmente preferito. Vedere la documentazione di avvio per un'introduzione.
Norman Gray,

plist non funzionerà per me - funziona come un incantesimo - grazie! MrGreen
BG Bruno

Onestamente non ero sicuro che la sintassi sarebbe stata la stessa su OS X.
NobleUplift

6

Nel caso in cui cambi opinione:

<?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>

Conservare come com.superuser.245713.plistin /Library/LaunchAgents/e creare root:wheelil proprietario / gruppo.


1
È probabilmente meglio metterlo /Library/LaunchAgentspiuttosto che /System/Library/LaunchDaemonsdal momento che /Systemè roba specifica del sistema operativo e quello sotto /Libraryè usato più per roba di terze parti. Inoltre, LaunchDaemons"dovrebbe contenere elementi che verranno eseguiti come root, in genere processi in background" dove LaunchAgents"esegui come utente o nel contesto di userland". La fonte di queste citazioni è un ottimo articolo su launchd che consulto per le domande di lancio.
Doug Harris,

@DougHarris Grazie per i suggerimenti! Devo ammettere che stavo solo digitando questo ad-hoc - mentre di solito collaudo le mie soluzioni, non ero disposto a riavviare la mia macchina per questo.
Daniel Beck

Questo è molto bello, anche se mi piace di più la soluzione cron di Vixie :)
John Bachir,

In realtà, dovrebbe essere inserito in / Library / LaunchDaemons. Gli agenti vengono eseguiti solo all'interno di una sessione utente, ovvero non verranno eseguiti (o più precisamente, diventeranno idonei all'esecuzione) fino a quando qualcuno non accederà, verrà eseguito nuovamente ogni volta che qualcuno accederà e verrà sempre eseguito come l'utente attualmente connesso. I daemon vengono eseguiti (/ diventano idonei all'esecuzione) all'avvio e mentre normalmente vengono eseguiti come root, possono essere eseguiti come altri utenti con la chiave UserName.
Gordon Davisson,


2

Esistono anche hook di accesso se si preferisce eseguire lo script (come root) quando un utente accede anziché all'avvio del computer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.