Domanda

Come posso eseguire uno script ogni, diciamo 30 minuti? Suppongo che ci siano diversi modi per diversi sistemi operativi. Sto usando OS X.

È stato utile?

Soluzione

Usa launchd . È un sistema di avvio molto potente e nel frattempo è il sistema di avvio standard per Mac OS X (l'attuale versione di OS X non si avvia nemmeno senza di essa). Per coloro che non hanno familiarità con launchd (o con OS X in generale), è come un incrocio tra init , cron , at , SysVinit ( init.d ), inetd , upstart e systemd . Prendendo in prestito concetti di tutti questi progetti, offrendo anche cose che potresti non trovare altrove.

Ogni servizio / attività è un file. La posizione del file dipende dalle domande: " Quando deve essere eseguito questo servizio? & Quot; e " Quali privilegi saranno necessari al servizio? "

Le attività di sistema vanno su

/Library/LaunchDaemons/

se devono essere eseguiti, indipendentemente dal fatto che un utente abbia effettuato l'accesso al sistema o meno. Verranno avviati con " root " privilegi.

Se devono essere eseguiti solo se qualsiasi utente è connesso, vanno su

/Library/LaunchAgents/

e verrà eseguito con i privilegi dell'utente che ha appena effettuato l'accesso.

Se verranno eseguiti solo se tu hai effettuato l'accesso, vanno su

~/Library/LaunchAgents/

dove ~ è la tua directory HOME. Questa attività verrà eseguita con i tuoi privilegi, proprio come se li avessi avviati tu stesso dalla riga di comando o facendo doppio clic su un file nel Finder.

Nota che esistono anche / System / Library / LaunchDaemons e / System / Library / LaunchAgents , ma come al solito, tutto in / System è gestito da OS X. Non devi inserire alcun file lì, non devi modificare alcun file lì, a meno che tu non sappia veramente cosa stai facendo. Il caos nella cartella Sistemi può rendere inutilizzabile il tuo sistema (portalo in uno stato in cui rifiuterà anche di riavviarsi). Queste sono le directory in cui Apple inserisce le attività launchd che mettono in funzione il sistema durante l'avvio, avviano automaticamente i servizi come richiesto, eseguono attività di manutenzione del sistema e così via.

Ogni attività launchd contiene un file in formato plist. Dovrebbe avere la notazione del nome di dominio inversa. Per esempio. puoi nominare il tuo compito

com.example.my-fancy-task.plist

Questo plist può avere varie opzioni e impostazioni. Scriverne una per mano non è ottimale, potresti voler ottenere lo strumento gratuito Lingon per creare i tuoi compiti. Questo strumento era gratuito, ora costa $ 5 nell'app store e $ 10 come versione non app store (la versione non app store è molto più potente e se hai già intenzione di pagarlo, sul serio, ottieni il non app store versione). Se qualcuno conosce uno strumento comparabile che è freeware o open source, lasciami una riga nei commenti e preferirò consigliarne uno (non voglio fare pubblicità qui per software commerciale).

Proprio come un esempio, potrebbe assomigliare a questo

<?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.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

Questo agente eseguirà lo script shell /usr/local/bin/my-script.sh ogni 1800 secondi (ogni 30 minuti). Puoi anche far eseguire un'attività in determinate date / orari (sostanzialmente launchd può fare tutto ciò che cron può fare) oppure puoi anche disabilitare " OnDemand " facendo in modo che launchd mantenga il processo permanentemente in esecuzione (se si chiude o si arresta in modo anomalo, launchd lo riavvierà immediatamente). Puoi anche limitare la quantità di risorse che un processo può utilizzare (come detto prima, Lingon mostra tutte queste impostazioni in una bella interfaccia utente).

Aggiornamento: Anche se OnDemand è ancora supportato, è obsoleto. La nuova impostazione è denominata KeepAlive , il che ha molto più senso. Può avere un valore booleano, nel qual caso è l'esatto opposto di OnDemand (impostandolo su false si comporta come se OnDemand sia true e viceversa). La grande novità è che può anche avere un valore di dizionario anziché un valore booleano. Se ha un valore di dizionario, hai un paio di opzioni extra che ti danno un controllo più preciso in quali circostanze l'attività deve essere mantenuta in vita. Per esempio. viene mantenuto attivo solo finché il programma termina con un codice di uscita pari a zero, solo finché esiste un determinato file / directory sul disco, solo se è attiva anche un'altra attività o solo se la rete è attualmente attiva.

Inoltre puoi abilitare / disabilitare manualmente le attività dalla riga di comando:

launchctl <command> <parameter>
Il comando

può essere caricato o scaricato, per caricare un plist o scaricarlo di nuovo, nel qual caso il parametro è il percorso del file. Oppure il comando può essere start o stop, per avviare o interrompere tale attività, nel qual caso il parametro è l'etichetta (com.example.my-fancy-task). Esistono anche altri comandi e opzioni.

Vedi la documentazione di Apple su formato plist e del launchctl strumento da riga di comando (nota che puoi selezionare la versione di OS X in cima, poiché il formato / le opzioni variano tra diverse versioni di OS X)

Altri suggerimenti

potresti usare il generatore di plist molto conveniente: http://launched.zerowidth.com/ (non è necessario acquistare nulla ... )

ti fornirà una shell one-liner per registrare un nuovo lavoro pianificato con il launchd

già raccomandato

Su MacOSX, hai almeno le seguenti opzioni:

Per esperienza personale, cron è il più affidabile. Quando ho provato, launchd ha avuto una serie di bug e stranezze. Gli allarmi iCal vengono eseguiti solo quando sei connesso (ma potrebbe essere qualcosa che preferisci).

Come ha sottolineato Mecki, launchd sarebbe la strada da percorrere. C'è un'interfaccia GUI per launchd chiamata Lingon che potresti voler controllare, invece di modificare il lanciare i file a mano:

  

Lingon è un'interfaccia utente grafica per la creazione di un launchd di modifica   file di configurazione per Mac OS X Leopard 10.5.

     

[snip ...]

     

La modifica di un file di configurazione è più semplice che mai in questa versione   e ha due diverse modalità. Modalità base che ha il più comune   impostazioni prontamente disponibili in un'interfaccia molto semplice e in modalità esperto   dove puoi aggiungere tutte le impostazioni direttamente nel testo o inserire   attraverso un menu.

MAC OS ha uno strumento Automator che è lo stesso di Utilità di pianificazione in Windows. E utilizzando Automator è possibile pianificare le attività su base giornaliera e collegare l'attività con eventi di calendario ricorrenti per eseguire script all'ora specificata ogni giorno. fai riferimento al link per eseguire script su base giornaliera in Mac OS

Per gli script Apple, ho creato un calendario iCal speciale e utilizzo gli allarmi per eseguirli periodicamente. Per gli strumenti da riga di comando, uso launchd.

Cordiali saluti: anche se mi manca la sua siplicità, cron è un ricordo del passato su OS X. Era il cane da guardia sulla pantera. Da quando Tiger è stato lanciato. Quindi, se stai eseguendo Leopard cron non è un'opzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top