Lavorare manualmente con i lavori cron è più comune con bassi volumi di lavori cron. Ma cosa succede se stai lavorando con elevati volumi di lavori cron? PHP è la risposta! Perché PHP? Semplicemente perché può automatizzare le attività necessarie per aggiungere, rimuovere ed elencare i lavori cron.
Non sei un lettore? Guarda questo video tutorial correlato! Non vedi il video? Assicurati che il blocco degli annunci sia disattivato.In questo tutorial imparerai come PHP può risparmiare tempo automatizzando l'aggiunta, la rimozione e l'elenco dei lavori cron per un sistema Linux.
Pronto? Salta subito!
Prerequisiti
Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere quanto segue:
- Crontab – Crontab è generalmente installato sui sistemi operativi Linux per impostazione predefinita.
- La maggior parte delle distribuzioni Linux utilizza lo stesso sistema cron. Gli esempi sono mostrati qui su un macOS che utilizza un sistema sottostante basato su BSD.
Creazione del file Crontab
Prima di poter gestire i lavori cron, è necessario prima un file per archiviare quei lavori cron. Tutti i lavori cron sono archiviati in un file crontab a livello di sistema.
Apri il tuo terminale ed esegui il comando seguente per cambiare la directory in /usr/local
e creare sottodirectory (jobs
e scripts
). Puoi nominare queste directory in modo diverso come preferisci. Queste directory memorizzeranno i tuoi file e script di lavoro cron in un secondo momento.
cd /usr/local && sudo mkdir jobs scripts
Ora esegui il comando seguente per creare il file crontab (crontab -e
). Il file crontab viene creato automaticamente all'interno del tuo ~/tmp directory la prima volta che invochi un crontab
comando.
# Sets default text editor to nano
export EDITOR='nano'
# Initializes the crontab file and opens it in nano
crontab -e
Aggiunta di lavori Single Cron
Ora che hai creato il file crontab, puoi iniziare a gestire i tuoi lavori cron. Ma prima devi concentrarti sull'aggiunta di questi tramite PHP. Come? Creerai ed eseguirai uno script PHP per aggiungere lavori cron.
I lavori Cron sono programmati con cinque parametri, come mostrato di seguito. Ogni parametro ha un valore predefinito di *, che indica che non è stato specificato alcun valore per quel parametro, sia per i processi cron orari, giornalieri, settimanali o mensili.
Se hai bisogno di un aggiornamento sulla sintassi di cron job con esempi, dai un'occhiata al sito Web di crontab.
1. Crea un file nel tuo editor di testo, copia/incolla il codice qui sotto e salvalo in /usr/local/jobs directory. Per questo esempio, il file è denominato newjob.py , ma puoi nominarlo diversamente. Il codice seguente stampa un testo (Executed!
) quando eseguito.
print("Executed!")
2. Quindi, crea un file di script PHP, quindi copia/incolla il codice seguente in quel file PHP e salvalo in /usr/local/scripts . Per questo tutorial, lo script si chiama add.php .
Durante il tutorial, ricorda di salvare i file di script nella directory /usr/local/scripts e i file di lavoro cron nella directory /usr/local/jobs.
Il codice seguente aggiunge newjob.py file come cron job nel file crontab.
Il
shell_exec
operazione memorizza l'elenco dei lavori cron in una stringa in memoria prima di aggiungerne uno nuovo, in modo da non perdere nessuno dei lavori cron esistenti.
Fa
shell_exec
non funziona? Potresti avere questa funzione disabilitata nel tuo file php.ini. Cercadisable_functions
configurazione nel tuo php.ini e rimuovishell_exec
dalla lista. Tieni presente che questo può essere abusato, quindi fai attenzione con questa funzione!
3. Eseguire il comando seguente per eseguire add.php
script da /usr/local/scripts directory. php add.php
php add.php
Assicurati di essere nella directory /usr/local/scripts durante l'esecuzione degli script durante il tutorial.
4. Infine, esegui il seguente crontab -l
comando per verificare se esiste il nuovo lavoro cron.
crontab -l
Elenco dei lavori Cron
Forse vuoi tenere traccia dei lavori cron che hai aggiunto, in modo da poterli aggiornare o rimuovere. In tal caso, il primo passo è elencare i lavori cron esistenti. L'elenco dei lavori cron è utile per tenere traccia dei lavori cron che hai.
Crea un nuovo script PHP, assegnagli un nome univoco e incolla il codice seguente nel file di script. Per questo esempio, lo script si chiama list.php .
Il codice seguente è shell_exec
l'operazione raccoglie e visualizza (echo()
) tutti i lavori cron (crontab -l
) dal file crontab.
Ora, esegui il comando seguente per eseguire list.php copione.
php list.php
Elencare una serie di lavori Cron
Forse vuoi stampare l'elenco dei lavori cron in un array invece di un semplice elenco. In tal caso, avrai bisogno del ) and [var_dump()](
funzioni. Queste funzioni ti consentono di memorizzare i lavori cron all'interno del file crontab come elemento all'interno di un array.
Sostituisci il contenuto di list.php file con il codice qui sotto. L'esecuzione del codice seguente elenca una matrice di lavori cron e stampa anche la lunghezza della stringa del lavoro cron.
Ora esegui il comando seguente per eseguire list.php
copione.
php list.php
Come puoi vedere di seguito, il codice restituisce l'elenco dei lavori cron in un array, mostrando anche la lunghezza della stringa.
Rimozione di Cron Jobs
Ora che hai l'elenco dei lavori cron esistenti, puoi decidere cosa vuoi fare con ogni lavoro cron. Forse hai lavori cron che vuoi rimuovere. In tal caso, specificherai il lavoro cron da rimuovere in una variabile stringa.
1. Crea un nuovo script PHP chiamato remove.php per questo esempio, quindi aggiungi il codice seguente allo script. Puoi nominare il file di script in modo diverso come preferisci.
Il codice seguente rimuove un lavoro cron specifico dal file crontab.
2. Eseguire il comando seguente per eseguire remove.php
sceneggiatura.
php remove.php
3. Infine, esegui crontab -l
comando per vedere se hai rimosso il newjob.php
cron lavoro. crontab -l
crontab -l
Aggiunta e rimozione di più processi Cron
Dall'aggiunta di un singolo lavoro cron, puoi anche aggiungere più lavori cron, magari quando hai attività quotidiane che desideri automatizzare. Come? Aggiungendo un ciclo for nel tuo script.
L'aggiunta e la rimozione di più lavori cron condividono un approccio simile, ma lo script per rimuovere più lavori cron utilizza più variabili, come mostrato di seguito.
1. Sostituisci il contenuto del tuo add.php file con il codice qui sotto. L'esecuzione del codice seguente aggiunge più lavori cron al file crontab pagaiando attraverso un array.
2. Quindi, esegui nuovamente il comando seguente per eseguire add.php
sceneggiatura. php add.php
php add.php
3. Esegui il seguente crontab -l
comando per verificare se esistono i lavori cron che hai aggiunto nel file crontab. crontab -l
crontab -l
4. Ora sostituisci il contenuto del tuo remove.php file con il codice seguente, che rimuove più lavori cron che hai definito. Simile all'aggiunta di più lavori cron, lo stesso approccio si applica alla rimozione di più lavori cron, ma con variabili aggiuntive.
5. Eseguire il comando seguente per eseguire remove.php
sceneggiatura.
php remove.php
6. Infine, esegui crontab -l
comando per verificare di aver rimosso i lavori cron.
crontab -l
Se hai rimosso con successo i lavori cron, non otterrai un output come quello qui sotto.
Creazione di funzioni per gestire i lavori Cron
Finora hai visto come aggiungere, rimuovere ed elencare i lavori cron in script separati. Ma per gestire efficacemente i lavori cron, puoi creare funzioni in un unico script invece di eseguire tre script separati.
Crea un nuovo file di script e incolla il codice qui sotto. Assegna allo script il nome che preferisci, ma per questo esempio lo script si chiama multi.php .
Il codice seguente aggiunge, rimuove ed elenca i lavori cron con tre funzioni separate che puoi chiamare in fondo allo script.
Ora, esegui il comando seguente per eseguire multi.php
copione.
php multi.php
Di seguito, puoi vedere l'output di list_jobs()
funzione chiamata in multi.php copione.
Prevenire il sovraccarico di memoria
Hai visto le capacità di PHP nella gestione dei lavori cron, ma avere troppi lavori cron consuma memoria. Come evitare il sovraccarico di memoria? Imposta un limite di conteggio a quanti lavori cron puoi aggiungere al file crontab.
1. Aggiungi la seguente funzione a multi.php sceneggiatura. La funzione seguente conta tutti i lavori cron contando tutte le righe all'interno del file crontab e stampa un messaggio per informarti del conteggio corrente dei lavori cron.
function count_jobs(){
$jobs = shell_exec("crontab -l");
# Counts all cron jobs from the crontab file and prints the result
echo("You currently have ".substr_count( $jobs, "\n")." cron jobs");
}
2. Quindi, chiama il count_jobs()
funzione alla fine dello script, come hai fatto nella sezione "Creazione di funzioni per gestire i lavori Cron".
3. Esegui il comando seguente per eseguire multi.php
sceneggiatura.
php multi.php
Come puoi vedere di seguito, c'è un messaggio che ti dice il conteggio attuale dei lavori cron.
Ma forse vuoi terminare automaticamente lo script se ci sono troppi processi cron in esecuzione contemporaneamente. In tal caso, aggiungi un if
condizione farà il trucco.
4. Sostituisci il count_jobs()
funzione nel multi.php file con quello qui sotto.
La funzione seguente legge il numero di righe all'interno del file crontab e, in base a quel numero, decide se terminare o meno lo script.
function count_jobs(){
$jobs = shell_exec("crontab -l");
# Counts all cron jobs from the crontab file and prints the result
echo("You currently have ".substr_count( $jobs, "\n")." cron jobs\n");
# Checks whether the cron jobs count is over 50 or not
if(substr_count( $jobs, "\n") > 50){
# Prints a message and terminates the script
exit("Too many cron jobs, cannot add any more!");
}
}
5. Infine, esegui il multi.php
script come hai fatto nel passaggio tre. php multi.php
php multi.php
Nell'output di seguito, puoi vedere il messaggio che ti dice il conteggio corrente dei lavori cron (63 ). Poiché il conteggio dei lavori cron è superiore a 50, lo script termina automaticamente e non procede all'aggiunta di lavori cron.
Conclusione
Durante questo tutorial, ti sei reso conto che PHP fornisce un modo per automatizzare i lavori cron con shell_exec()
funzione. Hai imparato come aggiungere, rimuovere ed elencare i processi cron in un unico script PHP assicurandoti di non sovraccaricare la tua memoria.
Ora, considererai PHP la prossima volta che dovrai gestire i lavori cron per i tuoi progetti?