Pianificazione di un'attività da ripetere a intervalli regolari

1

Ho scritto uno script Ruby che devo eseguire ogni 12 ore. C'è un modo semplice per farlo in OS X (in particolare Lion)?

    
posta finiteloop 14.07.2012 - 06:59
fonte

2 risposte

3

Ci sono un paio di modi per farlo, ma i dettagli dipendono da un paio di domande: lo script deve essere eseguito come utente root (amministratore) o normale? Ha bisogno di essere eseguito su un programma specifico o solo su un intervallo di 12 ore?

L'opzione OS X-ish è di creare un LaunchDaemon . Crea un file chiamato /Library/LaunchDaemons/local.scriptname.plist, con contenuti come questo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>local.scriptname</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/script</string>
                <string>someargument</string>
                <string>anotherargument</string>
        </array>
        <key>StartInterval</key>
        <integer>43200</integer>
        <key>RunAtLoad</key>
        <false/>
        <key>KeepAlive</key>
        <false/>
</dict>
</plist>

Note: 43200 è 12 ore in secondi, il che significa che ogni 12 ore inizierà all'avvio. Dovresti sostituire scriptname con un identificatore più appropriato sia nel valore Label che nel nome file (e se hai intenzione di pubblicarlo, sostituisci il prefisso "local." Con il tuo nome di dominio in ordine inverso, ad esempio "esempio.com.scriptname" ). Se deve essere eseguito come utente diverso da root, aggiungere:

        <key>UserName</key>
        <string>usertorunas</string>

Se ne hai bisogno per l'esecuzione in determinate ore del giorno, sostituisci la chiave StartInterval e il valore con qualcosa di simile a questo:

        <key>StartCalendarInterval</key>
        <array>
                <dict>
                        <key>Hour</key>
                        <integer>6</integer>
                        <key>Minute</key>
                        <integer>0</integer>
                </dict>
                <dict>
                        <key>Hour</key>
                        <integer>18</integer>
                        <key>Minute</key>
                        <integer>0</integer>
                </dict>
        </array>

... sostituendo le ore 6 e 18 (18:00) con le ore che desideri vengano eseguite.

L'altra opzione è usare cron, che è più generico-unix (ma funziona bene su OS X). Usa il comando crontab -e per creare / modificare il file crontab. Il crontab verrà creato per qualsiasi utente lo crei, quindi se lo script deve essere eseguito come root, usa sudo crontab -e . Il crontab dovrebbe assomigliare a questo:

0       6,18       *       *       *       /path/to/script someargument otherargument

Notare che non esiste un equivalente di StartInterval, questo lo esegue sempre alle 6:00 e alle 18:00.

    
risposta data 14.07.2012 - 08:24
fonte
0

Ottimo consiglio sopra. Tuttavia, dovrei dire che usare cron è la soluzione migliore e più robusta. Non solo è stabile; ti preparerà anche a lavorare in altri ambienti esterni a OS X.

    
risposta data 14.07.2012 - 21:35
fonte

Leggi altre domande sui tag