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.
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