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.