Qualcuno può raccomandare un buon tutorial per scrivere (da zero) un lavoro di avvio in stile cron?

17

Ho un lavoro abbastanza semplice che mi piacerebbe eseguire ogni ora. Potrei farlo usando cron , ma pensavo di usarlo per conoscere launchd , dal momento che ne ho sentito parlare bene. Ho preso come riferimento la pagina man launchd.plist , ma sto cercando qualcosa di più basato sulla creazione di un lavoro di esempio.

    
posta Hank Gay 29.08.2010 - 15:24
fonte

4 risposte

13

launchd esegue Daemon ( /Library/LaunchDaemons o /System/Library/LaunchDaemons ) come root, e li eseguirà indipendentemente dal fatto che gli utenti abbiano effettuato l'accesso o meno. Gli agenti di lancio ( /Library/LaunchAgents/ o ~/Library/LaunchAgents/ ) vengono eseguiti quando un utente ha effettuato l'accesso come tale utente. Non è possibile utilizzare setuid per modificare l'utente che esegue lo script sui daemon. La directory /System è riservata alle attività di Mac OS X quindi ti consiglio di inserire i tuoi launchd plists nella cartella /Library o ~/Library come è logico.

Quindi il primo passo è determinare se stai creando un agente o un demone.

Il secondo passo è quello di rendere il tuo file .plist . Puoi utilizzare programmi basati sulla GUI come Lingon per aiutarti o semplicemente utilizzare il tuo editor di testo preferito:

Un campione .plist per l'esecuzione di uno script ogni ora ( StartInterval o StartIntervalCalendar sono le chiavi che vogliamo - StartInterval per un elemento che si verifica ogni x secondi, StartIntervalCalendar per un tempo specifico e / o Data. Vedere 126907 su SuperUser per un esempio creato con StartCalendarInterval):

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>OnDemand</key>
    <true/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartInterval</key>
    <integer>3600</integer>
</dict>
</plist>

Modifica .plist come necessario per puntare allo script e agli eventuali argomenti necessari (gli argomenti sono su righe separate) e salva il file con lo stesso nome del valore Etichetta ma con .plist alla fine. (ad esempio, local.my-mac.flickrstats verrebbe salvato come local.my-mac.flickrstats.plist ). Se non lo hai già fatto, sposta quel file .plist su /Library/LaunchDaemons quando crei un Daemon (viene eseguito sempre) o su ~/Library/LaunchAgents (solo tu hai effettuato l'accesso) o /Library/LaunchAgents (qualsiasi utente ha effettuato l'accesso ).

Per avviare il lavoro che si desidera eseguire launchctl come necessario per caricare il file. Per gli articoli in /Library , dovresti usare sudo: ad esempio, sudo launchctl load -w /PATH/TO/PLIST

Per riferimento consulta anche le seguenti domande su Super User: Comando Launchd come root , Carica un demone di sistema e Come posso far funzionare uno script ogni giorno

    
risposta data 29.08.2010 - 16:07
fonte
4

So che non è un tutorial buono , ma potresti dare un'occhiata a Daemon e guida alla programmazione dei servizi di Apple, che ha una sezione sulla pianificazione dei lavori a tempo.

So che non è un tutorial completo, ma con esso puoi capire le basi di launchd .

Fornisce anche un esempio di un'attività crond :

<?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.apple.periodic-daily</string>
    <key>ProgramArguments</key>
    <array> 
        <string>/usr/sbin/periodic</string>
        <string>daily</string>
    </array>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
    <key>StartCalendarInterval</key>
    <dict>  
        <key>Hour</key>
        <integer>3</integer>
        <key>Minute</key>
        <integer>15</integer>
    </dict>
</dict>
</plist>
    
risposta data 29.08.2010 - 15:33
fonte
4

Questo mi ha aiutato molto: link

Riguarda la configurazione, l'amministrazione e la risoluzione dei problemi utilizzando Terminal o la GUI di launchd LaunchControl . Sono forniti anche degli esempi.

    
risposta data 30.10.2013 - 09:11
fonte
2

So che stavi cercando un tutorial, ma nella remota possibilità che qualcuno venga qui come parte della ricerca di uno strumento che aiuti a creare / modificare le voci di avvio, l'ho usato prima: Lingon (sourceforge)

Non è più sviluppato attivamente, ma quello che funziona non funziona (e ovviamente include la fonte, ecc.). L'ho usato su Snow Leopard per pianificare i backup sul cloud Amazon, ecc.

    
risposta data 30.08.2010 - 12:26
fonte

Leggi altre domande sui tag