Vota questo articolo :
Questo articolo vi è stato utile ?
Sì
No
Vous avez noté 0 étoile(s)
Sommaire
Procédure
Lo scopo di un cron job è quello di eseguire automaticamente uno script, un comando o un programma a orari prestabiliti.
Con"LWS cron job", potete programmare l'esecuzione di uno script sul vostro sito a orari diversi. Ad esempio, una volta alla settimana, una volta al giorno, l'8 di ogni mese, ecc.
Cron è uno strumento molto utile per gli amministratori di sistema per automatizzare varie attività, come il backup dei dati, l'aggiornamento del software, l'invio di e-mail, ecc.
A queste attività viene applicato un timeout di 240s, il che significa che se il vostro script impiega più di 4 minuti per essere eseguito, verrà automaticamente interrotto dopo 4 minuti.
Per prima cosa, è necessario accedere al proprio account LWS e accedere all'hosting condiviso per il quale si desidera creare un cron job.
Una volta entrati nella gestione del servizio, cercate il blocco"Database & PHP" e cliccate su"Cron tasks".
La prima cosa da configurare per il cron job è la sua periodicità.
A questo livello, LWS offre delle preimpostazioni nel suo strumento in modo da poterle configurare in un clic.
Per farlo, basta utilizzare il primo elenco in cima al modulo e selezionare uno dei parametri proposti. I campi verranno automaticamente compilati in base alla periodicità indicata nell'elenco selezionato.
Se la periodicità che si desidera impostare non è proposta in questo primo elenco, non preoccupatevi, possiamo configurare ogni elemento.
Per ogni elemento (minuti, ore, giorni, ecc.), è possibile inserire i valori manualmente, oppure utilizzare il campo elenco a destra di ogni campo.
Se, ad esempio, voglio che la mia attività inizi ogni giorno alle 12:27, basta selezionare il numero 27 nell'elenco allegato al campo dei minuti e selezionare 12:00 pm (mezzogiorno) nell'elenco allegato al campo delle ore.
Esistono tre modi per richiamare il vostro script tramite lo strumento Cron Task:
La differenza tra queste tre opzioni risiede principalmente nel modo in cui eseguono lo script.
Una chiamata Wget o Curl utilizza il protocollo HTTP, il che significa che sarà soggetta alle configurazioni e alle restrizioni di Apache, come il timeout, che può essere relativamente breve.
Lachiamata PHP, invece, sarà libera dalle limitazioni che abbiamo discusso con gli altri due metodi. Pensate alla chiamata PHP come a una connessione SSH.
Ci si potrebbe quindi chiedere quale metodo scegliere per impostare il task Cron. La risposta è che non ci sono differenze reali per gli script di base che vengono eseguiti rapidamente. Tuttavia, se il vostro task CRON è piuttosto grande, con molte azioni eseguite e quindi un tempo di esecuzione leggermente più lungo, il metodo più adatto sarà unachiamata PHP. A differenza di Curl o Wget, il timeout sarà più lungo (4 minuti).
Vedremo come impostare un cron job per ciascuna delle chiamate sopra menzionate. Prenderemo come esempio un semplice sito che chiama uno script root.
Chiamata cURL
Quando si effettua una chiamata curl utilizzando il protocollo HTTP, si chiama semplicemente l'URL del nostro file come segue
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Potrebbe anche essere necessario inviare dei parametri al nostro script. Per farlo, basta aggiungerli come segue:
curl -d "param1=valore1¶m2=valore2" -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Questo ci permetterà di recuperare i valori dei parametri nel codice del nostro script POST.
Opzione | Ruolo |
---|---|
-s |
Modalità silenziosa (nessuna barra di avanzamento). |
-H "Cache-Control: no-cache |
Forza il no-cache lato server. |
> /dev/null |
Reindirizza l'output per non salvare nulla. |
Chiamata a Wget
Durante una chiamata a Wget, che utilizza anche il protocollo HTTP, come per la chiamata a cURL, chiameremo anche l'URL del nostro script. In questo modo si otterrà :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php"
Se abbiamo bisogno di passare dei parametri allo script, con Wget non abbiamo altra scelta che passare i parametri in GET. Ecco come scrivere il comando :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php?param1=value1¶m2=value2"
Nello script, possiamo recuperare questi due parametri in GET.
Opzione | Ruolo |
---|---|
--no-cache |
Evita l'uso di cache intermedie (utile con alcuni proxy). |
--output-document=/dev/null |
Non memorizza nulla a livello locale. |
--header="Cache-Control: no-cache" |
Invia un'intestazione HTTP per evitare la cache lato server. |
Chiamata PHP
Nel caso di un sito semplice, immaginiamo che il file contenente il mio script si chiami cron.php
È sufficiente inserire il seguente comando nello strumento Cron Task:
php /htdocs/cron.php
In questo caso, la versione di PHP utilizzata per eseguire lo script sarà la 8.0 per impostazione predefinita.
Se si desidera utilizzare una versione specifica di PHP, è sufficiente modificare leggermente la chiamata. Per esempio, se si vuole usare la versione 7.2 per eseguire lo script, questo è il comando chiamato :
php72 /htdocs/cron.php
Potrebbe anche essere necessario passare un argomento che sarà poi utilizzato nel nostro script.
Per esempio, immaginiamo che lo scopo del nostro script sia quello di inviare un'e-mail in base a un criterio da noi definito, come la data di nascita. Potremmo quindi voler passare questo criterio nella chiamata. Ecco come farlo tramite la riga di comando:
php72 /htdocs/cron.php tipo=anniversario
Casi speciali
Esistono anche casi speciali, a seconda di ciò che si usa per il proprio sito.
Per esempio, nel caso di un sito creato con il framework Cakephp, la configurazione del task CRON sarà un po' diversa, perché sarà effettuata tramite un comando SHELL chiamato dal sistema del framework.
Immaginiamo di avere un sito di e-commerce creato con il framework Cakephp e di voler impostare uno script che invii un'e-mail al miglior cliente offrendogli un codice promozionale.
Creeremo un comando di Cake che chiameremo SendCP, che conterrà lo script che gestisce ciò che vogliamo fare. Ecco come configurare il task Cron:
php72 /htdocs/Console/cake.php SendCP
Sarebbe lungo fare un esempio per ogni caso, ma con quello che è stato dato qui, si ha già una buona base per usare lo strumento dei task di Cron.
Utilizzando i vari esempi, ora sappiamo come scrivere il nostro comando per :
Ora vedremo come creare un file di log in modo da poter vedere cosa è successo durante lo script chiamato da Cron.
A tale scopo, utilizzeremo l'esempio seguente per il nostro script CRON.
Esempio di funzione echo in PHP per il file di log
<?php /* Così non dovrete preoccuparvi della cache */ header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); /* Scrivere la data corrente nel file, ad esempio: 2023/01/19 12:24:01 */ /* PHP_EOL consente di saltare una riga del file */ echo date('Y/m/d h:i:s').PHP_EOL; /* Scrivere la frase sottostante nel file di log */ echo 'Recording my Cron'.PHP_EOL.PHP_EOL; ?>
Rendering del file di log dopo l'avvio dello script tramite Cron Job
2023/01/19 02:57:01 Registrazione del mio Cron 2023/01/19 03:57:01 Registrazione del mio Cron 2023/01/19 04:57:01 Registrazione del mio Cron 2023/01/19 05:57:01 Registrazione del mio Cron 2023/01/19 06:57:01 Registrazione del mio Cron 2023/01/19 07:57:01 Registrazione del mio Cron 2023/01/19 08:57:01 Registrazione del mio Cron
Ciò che si inserisce nel file di log dipenderà quindi dall'utente e da ciò che si vuole tracciare nello script. Ad esempio, potrebbe essere un elenco di azioni con il risultato per ciascuna di esse.
Esempio di chiamata cURL con ritorno in un file di log
Per una chiamata cURL, ecco il comando da inserire nel campo "Command":
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_curl.log 2>&1
In questo esempio, verranno effettuati dei writeback (echo PHP) al file cron_curl.log nella cartella logs. Se il file o la cartella non esistono, verranno creati automaticamente.
Opzione | Ruolo |
---|---|
-s |
Modalità silenziosa (nessuna barra di avanzamento). |
-H "Cache-Control: no-cache" |
Forza il no-cache lato server. |
> /htdocs/logs/cron_curl.log |
reindirizza l'output standard (stdout) a cron_curl.log. |
2>&1 | reindirizza anche gli errori (stderr) allo stesso file. |
Esempio di chiamata a wget con ritorno a un file di log
Per una chiamata a Wget, ecco il comando da utilizzare:
wget -O - -q --no-cache --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_wget.log 2>&1
In questo esempio, il feedback di scrittura (echo PHP) sarà inviato al file cron_wget.log nella cartella logs. Se il file o la cartella non esistono, verranno creati automaticamente.
Opzione | Ruolo |
---|---|
--no-cache |
Evita l'uso di cache intermedie (utile con alcuni proxy). |
--header="Cache-Control: no-cache" |
Invia un'intestazione HTTP per evitare la cache lato server. |
--post-data="..." | aggiunge un'intestazione HTTP personalizzata. |
> /htdocs/logs/cron_wget.log |
reindirizza l'output standard (stdout) a cron_wget.log. |
2>&1 | reindirizza anche gli errori (stderr) allo stesso file. |
Esempio di chiamata PHP con ritorno a un file di log
Per una chiamata a PHP, ecco il comando da utilizzare:
php72 /htdocs/cron.php >> /htdocs/logs/cron_php.log
In questo esempio, il feedback di scrittura (echo PHP) sarà inviato al file cron_php.log nella cartella logs. Se il file o la cartella non esistono, verranno creati automaticamente.
Una volta create le attività cron, è possibile trovarle direttamente nell'elenco che appare sotto il modulo di aggiunta.
Qui troverete un elenco con il comando registrato, la periodicità e l'opzione per eliminare un cron job o metterlo in pausa.
Se avete un pacchetto LWS Starter o superiore, potete modificare il cron job del vostro pacchetto tramite il Terminale Web accessibile dall'amministrazione del pacchetto.
Per farlo, collegatevi al vostro hosting e accedete all'hosting condiviso per il quale volete modificare un cron job.
Cliccate su"Terminale" nella sezione "Software".
Accedere al file cron utilizzando il seguente comando:
crontab -e
Una volta entrati nel file cron, sfogliare il file per trovare l'attività che si desidera modificare. Ogni riga del file rappresenta un'attività separata. Modificate quindi il lavoro di cron, assicurandovi che la sintassi sia corretta. Quindi salvatelo utilizzando la scorciatoia da tastiera [CTRL] +X e poi"Y". Quindi premere [Invio].
È quindi possibile verificare se il cron job è stato modificato correttamente utilizzando il seguente comando:
crontab -l
Avete collegato il vostro dominio a CloudFlare utilizzando il DNS di quest'ultimo e volete configurare un cron job dalla vostra area clienti nella sezione associata, ma il job viene eseguito solo una volta senza ripetersi all'intervallo di tempo desiderato. Questo problema è noto, CloudFlare blocca l'esecuzione dei cron inviati dai nostri servizi. Per superare questo problema, ecco un workaround.
Le attività di cron configurate dall'area clienti non funzionano se si utilizza il DNS di CloudFlare. Per superare questo problema, seguite questa procedura:
Nella sezione "DNS", aggiungete un record CNAME come mostrato nell'esempio seguente:
Sostituite"cron" con il nome del vostro sottodominio e"domain.ext" con il nome del vostro dominio.
Assicuratevi che la nuvola sia grigia e non arancione. Questo indica a CloudFlare che non si desidera utilizzare i suoi servizi per questo sottodominio.
È quindi possibile fare clic sul pulsante"Aggiungi record".
Ora sapete come : - Capire lo scopo e il funzionamento di un cron job 🤖
Ci auguriamo che questo articolo vi abbia fornito tutte le chiavi per padroneggiare i task di cron e automatizzare le attività di sistema in modo efficiente.
Se avete domande, feedback o suggerimenti da condividere, non esitate a lasciarli in un commento. Grazie per aver letto e a presto per altri consigli pratici! 🙏💬
Vota questo articolo :
Questo articolo vi è stato utile ?
Sì
No
0mn lettura
Multidominio - Mettere più domini sullo stesso servizio di web hosting
1mn lettura
È possibile rimuovere la funzione anti-spam di RSpamD su un hosting condiviso?
0mn lettura
Come posso visualizzare le e-mail inviate con la funzione PHP mail e bloccate da SPAMASSASSIN?