Gestire lavori Cron usando Python

In questo tutorial imparerai l'importanza dei lavori cron e del perché ne hai bisogno. Darai un'occhiata a python-crontab, un modulo Python per interagire con il crontab. Imparerai come manipolare i lavori cron da un programma Python usando il python-crontab modulo.

Che cos'è Cron?

Durante l'amministrazione del sistema, è necessario eseguire processi in background su un server per eseguire attività di routine. Cron è un processo di sistema che viene utilizzato per eseguire attività in background su una base di routine. Cron richiede un file chiamato crontab che contiene l'elenco delle attività da eseguire in un determinato momento. Tutti questi lavori vengono eseguiti in background all'ora specificata.

Per visualizzare i cron jobs in esecuzione sul tuo sistema, accedi al tuo terminale e digita:

crontab -l

Il comando sopra mostra l'elenco dei lavori nel crontab file. Per aggiungere un nuovo cron job a crontab, digitare:

crontab -e

Il comando precedente mostrerà il crontab file in cui è possibile pianificare un lavoro. Diciamo che hai un file chiamato hello.py che assomiglia a:

stampa "Hello World"

Ora, per programmare un cron job per eseguire lo script sopra riportato in output su un altro file, è necessario aggiungere la seguente riga di codice:

50 19 * * * python ciao.pia >> a.txt

La riga di codice precedente pianifica l'esecuzione del file con l'output in un file chiamato a.txt. I numeri che precedono il comando da eseguire definiscono l'orario di esecuzione del lavoro. La sintassi dei tempi ha cinque parti:

  1. minuto
  2. ora
  3. giorno del mese
  4. mese
  5. giorno della settimana

Gli asterischi (*) nella sintassi dei tempi indicano che verrà eseguito ogni volta. 

Presentazione di Python-Crontab 

python-crontab è un modulo Python che fornisce accesso ai cron jobs e ci consente di manipolare il crontab file dal programma Python. Automatizza il processo di modifica del file crontab file manualmente. Per iniziare python-crontab, è necessario installare il modulo usando pip:

pip installa python-crontab

Una volta che hai python-crontab installato, importalo nel programma python.

da crontab importare CronTab

Scrivi il tuo primo lavoro Cron

Usiamo il python-crontab modulo per scrivere il nostro primo cron job. Crea un programma Python chiamato writeDate.py. Dentro writeDate.py, aggiungi il codice per stampare la data e l'ora correnti su un file. Ecco come writeDate.py guarderei:

importare datetime con open ('dateInfo.txt', 'a') come outFile: outFile.write ('\ n' + str (datetime.datetime.now ()))

Salva le modifiche precedenti.

Creiamo un altro programma Python che pianificherà il writeDate.py Programma Python da eseguire ogni minuto. Crea un file chiamato scheduleCron.py.

Importa il crontab modulo nel scheduleCron.py programma.

da crontab importare CronTab

Usando il crontab modulo, accediamo al sistema crontab.

my_cron = CronTab (utente = 'nome utente')

Il comando precedente crea un accesso al sistema crontab dell'utente. Andiamo a scorrere i lavori cron e dovresti essere in grado di vedere qualsiasi cron job creato manualmente per il nome utente particolare.

per lavoro in my_cron: processo di stampa

Salva le modifiche e prova ad eseguire il scheduleCron.py e dovresti avere l'elenco di lavori cron, se ce ne sono, per l'utente in particolare. Dovresti essere in grado di vedere qualcosa di simile all'esecuzione del programma di cui sopra:

50 19 * * * python hello.py >> a.txt # alle 5 del mattino di ogni settimana con:

Andiamo avanti con la creazione di un nuovo cron job usando il crontab modulo. Puoi creare un nuovo cron usando il nuovo metodo e specificando il comando da eseguire.

job = my_cron.new (command = 'python /home/jay/writeDate.py')

Come puoi vedere nella riga di codice sopra, ho specificato il comando da eseguire quando viene eseguito il job cron. Una volta ottenuto il nuovo cron job, è necessario pianificare il cron job. 

Pianifichiamo che il cron job venga eseguito ogni minuto. Quindi, in un intervallo di un minuto, la data e l'ora correnti saranno aggiunte al dateInfo.txt file. Per pianificare il lavoro per ogni minuto, aggiungi la seguente riga di codice:

job.minute.every (1)

Una volta pianificato il lavoro, è necessario scrivere il lavoro nella scheda cron.

my_cron.write ()

Ecco il scheduleCron.py file:

da crontab import CronTab my_cron = CronTab (user = 'roy') job = my_cron.new (comando = 'python /home/roy/writeDate.py') job.minute.every (1) my_cron.write ()

Salvare le modifiche precedenti ed eseguire il programma Python.

python scheduleCron.py

Una volta eseguito, controlla il crontab file usando il seguente comando:

crontab -l

Il comando precedente dovrebbe visualizzare il processo cron appena aggiunto.

* * * * * python /home/roy/writeDate.py

Attendi un minuto e controlla la tua home directory e dovresti essere in grado di vedere il dateInfo.txt file con la data e l'ora correnti. Questo file verrà aggiornato ogni minuto e la data e l'ora correnti verranno aggiunte al contenuto esistente.

Aggiornamento di un processo cron esistente

Per aggiornare un cron job esistente, devi trovare il cron job usando il comando o usando un Id. È possibile avere un ID impostato su un processo cron sotto forma di commento durante la creazione di un processo cron utilizzando python-crontab. Ecco come è possibile creare un cron job con un commento:

 job = my_cron.new (command = 'python /home/roy/writeDate.py', comment = "dateinfo")

Come visto nella riga di codice sopra, un nuovo job cron è stato creato usando il commento come dateinfo. Il commento sopra può essere usato per trovare il lavoro cron.

Quello che devi fare è scorrere tutti i lavori in crontab e controlla il lavoro con il commento dateinfo. Ecco il codice:

 my_cron = CronTab (user = 'roy') per il lavoro in my_cron: processo di stampa

Controlla il commento di ogni lavoro usando il job.comment attributo.

 my_cron = CronTab (utente = 'jay') per lavoro in my_cron: se job.comment == 'dateinfo': lavoro di stampa

Una volta ottenuto il lavoro, riprogrammare il cron job e scrivere al cron. Ecco il codice completo:

da crontab import CronTab my_cron = CronTab (user = 'roy') per lavoro in my_cron: if job.comment == 'dateinfo': job.hour.every (10) my_cron.write () stampa 'Cron job modificato con successo'

Salvare le modifiche precedenti ed eseguire il scheduleCron.py file. Elenca gli articoli nel crontab file usando il seguente comando:

crontab -l

Dovresti essere in grado di vedere il cron job con orario di programmazione aggiornato.

* * / 10 * * * python /home/jay/writeDate.py # dateinfo

Clearing Jobs da Crontab

python-crontab fornisce metodi per cancellare o rimuovere lavori da crontab. È possibile rimuovere un cron job dal crontab in base alla pianificazione, al commento o al comando.

Diciamo che vuoi cancellare il lavoro con un commento dateinfo dal crontab. Il codice sarebbe:

da crontab import CronTab my_cron = CronTab (user = 'roy') per lavoro in my_cron if job.comment == 'dateinfo': my_cron.remove (job) my_cron.write ()

Allo stesso modo, per rimuovere un lavoro basato su un commento, puoi chiamare direttamente il rimuovere metodo sul my_cron senza alcuna iterazione. Ecco il codice:

my_cron.remove (comment = 'dateinfo')

Per rimuovere tutti i lavori dal crontab, puoi chiamare il Rimuovi tutto metodo.

my_cron.remove_all ()

Una volta fatto con le modifiche, scriverlo al cron usando il seguente comando:

my_cron.write ()

Calcolo della frequenza del lavoro

Per verificare quante volte il tuo lavoro viene eseguito utilizzando python-crontab, puoi usare il frequenza metodo. Una volta che hai il lavoro, puoi chiamare il metodo chiamato frequenza, che restituirà il numero di volte in cui il lavoro viene eseguito in un anno.

da crontab import CronTab my_cron = CronTab (user = 'roy') per lavoro in my_cron: print job.frequency ()

Per verificare il numero di volte in cui il lavoro viene eseguito in un'ora, è possibile utilizzare il metodo frequency_per_hour.

my_cron = CronTab (user = 'roy') per il lavoro in my_cron: print job.frequency_per_hour ()

Per verificare la frequenza del lavoro in un giorno, è possibile utilizzare il metodo frequency_per_day

Controllo del programma di lavoro

python-crontab fornisce la funzionalità per verificare la pianificazione di un particolare lavoro. Per far funzionare questo, avrai bisogno del croniter modulo da installare sul tuo sistema. Installare croniter usando pip:

pip installa croniter

Una volta che hai croniter installato, chiamare il metodo di pianificazione sul lavoro per ottenere la pianificazione del lavoro.

sch = job.schedule (date_from = datetime.datetime.now ())

Ora puoi ottenere il programma di lavoro successivo utilizzando il Get_Next metodo.

stampa sch.get_next ()

Ecco il codice completo:

importare datetime da crontab import CronTab my_crons = CronTab (user = 'jay') per lavoro in my_crons: sch = job.schedule (date_from = datetime.datetime.now ()) print sch.get_next ()

Puoi anche ottenere il programma precedente usando il get_prev metodo.

Avvolgendolo

In questo tutorial hai visto come iniziare a utilizzare python-crontab per accedere al sistema crontab da un programma Python. utilizzando python-crontab, è possibile automatizzare il processo manuale di creazione, aggiornamento e pianificazione dei lavori cron. 

Hai usato? python-crontab o qualsiasi altra libreria per l'accesso al sistema crontab? Mi piacerebbe sentire i tuoi pensieri. Fateci sapere i vostri suggerimenti nei commenti qui sotto.

Impara Python

Impara Python con la nostra guida completa al tutorial su Python, sia che tu stia appena iniziando o che sei un programmatore esperto che cerca di imparare nuove abilità.