GNU/Linux >> Linux Esercitazione >  >> Linux

Cron Job per verificare se lo script PHP è in esecuzione, in caso contrario eseguito?

Mi chiedo se qualcuno potrebbe indicarmi la giusta direzione. Ho poca esperienza di lavoro con la riga di comando di Linux e recentemente, a causa di vari fattori nel lavoro, mi è stato richiesto di acquisire conoscenze.

Fondamentalmente ho due php script che risiedono in una directory sul mio server. Ai fini dell'applicazione, questi script devono essere eseguiti continuamente. Attualmente lo implemento in questo modo:

nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &

e

nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &

Tuttavia, ho notato che nonostante il ciclo infinito gli script si interrompono periodicamente e sono costretto a riavviarli. Non sono sicuro del perché, ma lo fanno. Questo mi ha fatto esaminare la prospettiva di un CRON job che controlla se sono in esecuzione e, in caso contrario, eseguili/riavvia.

Qualcuno sarebbe in grado di fornirmi alcune informazioni su come procedere?

Risposta accettata:

Vorrei ampliare la risposta di Davidann poiché sei nuovo al concetto di cron job. Ogni sistema UNIX o Linux ha un crontab memorizzato da qualche parte. Il crontab è un file di testo normale. Considera quanto segue:(Dal Wiki Gentoo su Cron)

#Mins  Hours  Days   Months  Day of the week
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

Questo crontab dovrebbe ripetere "Mi piace molto cron" ogni minuto di ogni
ora di ogni giorno ogni due mesi. Ovviamente lo faresti solo
se ti piacesse davvero cron. Il crontab farà anche eco "Mi piace cron a
little" alle 16:30 di tutti i giorni a gennaio e febbraio. Risuonerà anche
"Non mi piace molto cron" alle 3:10 del 1° gennaio.

Essendo nuovo in cron, probabilmente vorrai commentare le colonne speciali in modo da sapere a cosa serve ciascuna colonna. Ogni implementazione di Cron che conosco è sempre stata di questo ordine. Ora unendo la risposta di Davidann con il mio file commentato:

#Mins  Hours  Days   Months  Day of week
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock

* * * * * lockfile -r 0 /tmp/the.lock &&php get_tweets.php; rm -f /tmp/il.lock

L'impostazione predefinita di nessun valore in ciascuna colonna è:
Ogni minuto di ogni ora di ogni giorno di ogni mese per tutta la settimana, –> ogni minuto per tutto l'anno.

Correlati:Linux - Un eseguibile Linux compilato su un "sapore" di Linux verrà eseguito su uno diverso?

Come afferma Davidann, l'utilizzo di un file di blocco garantisce che venga eseguita solo una copia dell'interprete php, php parse_tweets.php è il comando per "eseguire" il file e l'ultimo bit della riga cancellerà il file di blocco per prepararsi per l'esecuzione successiva. Non mi piace eliminare un file ogni minuto, ma se questo è il comportamento di cui hai bisogno, è molto accettabile. La scrittura e la riscrittura su disco sono solo preferenze personali


Linux
  1. Esegui cron job solo se non è già in esecuzione

  2. Come impostare un cron job per eseguire un eseguibile ogni ora?

  3. Esecuzione di script di shell in parallelo

  4. Come eseguire cron job ogni ora e 10 min

  5. cron job occasionalmente non in esecuzione

Come eseguire uno script Python in PHP

Cron Job non viene eseguito?

Come impostare il lavoro cron per eseguire uno script PHP in cPanel?

Come posso ottenere un cron job da eseguire ogni 30 minuti?

Come configurare cron job per l'esecuzione ogni 2 giorni alle 23:00

Come eseguire cron job in un'ora specifica ogni giorno?