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


19

Ho un lavoro abbastanza semplice che mi piacerebbe eseguire ogni ora. Potrei farlo usando cron, ma ho pensato di usarlo per saperne di più launchd, dato che ne ho sentito parlare. Ho la man launchd.plistpagina come riferimento, ma sto cercando qualcosa di più basato sulla costruzione di un lavoro di esempio.


Questo dovrebbe essere spostato su StackOverflow.
Philip Regan,

5
@Philip Regan Ci ho pensato, ma per me non c'è davvero molta programmazione. Se avessi fatto una crondomanda, superuser.com non sarebbe stato il posto giusto? Poiché launchdè la versione di Apple di cron(e anche daemontools, e forse anche altre cose), ho pensato che questa fosse la mia migliore opzione.
Hank Gay,

Potresti anche inserirlo in uno script di automator ed eseguirlo da iCal - se funziona come te
user151019

Con un po 'di ironia divertente, tre anni dopo ho bisogno di implementare un processo cron / launchd e mi sono ritrovato a guardare di nuovo questa domanda sotto una luce completamente diversa. Stack Overflow ha un'opinione mista su cosa fare con le domande avviate, ma a loro non piacciono davvero queste domande. Pensavo solo che l'intera situazione fosse divertente. +1
Philip Regan,

Risposte:


14

launchdesegue Daemon ( /Library/LaunchDaemonso /System/Library/LaunchDaemons) come root e li eseguirà indipendentemente dal fatto che gli utenti abbiano effettuato l'accesso o meno. Gli agenti di avvio ( /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 /Systemdirectory è riservata alle attività di Mac OS X, quindi ti consiglio di inserire le tue launchdcartoline nella cartella /Libraryo nella ~/Librarycartella come ha senso.

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

Il secondo passo è creare il tuo .plistfile. Puoi usare programmi basati su GUI come Lingon per aiutarti o semplicemente usare il tuo editor di testo preferito:

Un esempio .plistper l'esecuzione di uno script ogni ora ( StartIntervalo StartIntervalCalendarsono le chiavi che vogliamo - StartIntervalaffinché un elemento accada ogni xsecondo, StartIntervalCalendarper un orario e / o una data specifici. Vedere 126907 su SuperUser per un esempio che ho realizzato 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>

Modificate il .plistnecessario per puntare al vostro script e qualsiasi argomento se necessario (gli argomenti sono su righe separate) e salvate il file con lo stesso nome del valore Label ma con .plistalla fine. (ad esempio, local.my-mac.flickrstatsverrebbe salvato come local.my-mac.flickrstats.plist). Se non l'hai già fatto, sposta quel .plistfile su /Library/LaunchDaemonsquando crei un Demone (funziona sempre) o su ~/Library/LaunchAgents(solo tu sei loggato) o /Library/LaunchAgents(qualsiasi utente ha effettuato l'accesso).

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

Per riferimento, controlla anche le seguenti domande su Super User: comando Launchd come root , carica un demone a livello di sistema e come posso ottenere uno script da eseguire ogni giorno


4

So che non è un buon tutorial, ma potresti dare un'occhiata alla Guida alla programmazione dei demoni e 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 inoltre un esempio di crondun'attività:

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

Ho annullato il voto perché hai ammesso che la risorsa non è quella che ho chiesto e mi ha colpito un po 'RTFM, ma l'ho ripensato e mi piacerebbe annullare il mio voto negativo. Purtroppo non posso farlo a meno che la domanda non sia stata modificata (è stata troppo lunga) e non ho ancora abbastanza rappresentante da modificare. Potresti modificare qualcosa? Grazie.
Hank Gay,

@Hank Gay: Grazie per il tuo commento. Ho anche modificato la mia risposta.
Studer

4

Questo mi ha aiutato molto: http://launchd.info

Copre la configurazione, l'amministrazione e la risoluzione dei problemi utilizzando Terminal o Launchd GUI launchd . Vengono forniti anche esempi.


2

So che stavi cercando un tutorial, ma per caso qualcuno viene qui come parte della ricerca di uno strumento per aiutarli a creare / modificare voci di avvio, l'ho usato prima: Lingon (sourceforge)

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


Lingon è ora nell'App Store, quindi è ancora attivo, ma non gratis, vedi < peterborgapps.com/lingon >
user151019,

La versione dell'appstore è stata paralizzata dai requisiti dei criteri di Apple. La versione precompilata di SourceForge funziona bene - sebbene la finestra di dialogo modale su save, che mi dice di disconnettersi o riavviare per abilitare il demone non venga chiusa. Ho dovuto chiudere il programma dal suo menu (non forzare l'uscita) e controllare per confermare che aveva salvato correttamente il file. Paralizzato in quel trigger di file e directory non sono supportati, né è possibile creare qualcosa che gira come root con la versione di AppStore.
marfarma,
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.