Ich frage mich, ob mich jemand in die richtige Richtung weisen könnte. Ich habe wenig Erfahrung mit der Arbeit mit der Linux-Befehlszeile und musste mir in letzter Zeit aufgrund verschiedener Faktoren bei der Arbeit Kenntnisse aneignen.
Grundsätzlich habe ich zwei php
Skripte, die sich in einem Verzeichnis auf meinem Server befinden. Für die Zwecke der Anwendung müssen diese Skripte kontinuierlich ausgeführt werden. Derzeit implementiere ich das folgendermaßen:
nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &
und
nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &
Ich habe jedoch festgestellt, dass die Skripte trotz der Endlosschleife regelmäßig anhalten und ich gezwungen bin, sie neu zu starten. Ich bin mir nicht sicher warum, aber sie tun es. Das hat mich veranlasst, nach einem CRON
zu suchen Job, der überprüft, ob sie ausgeführt werden, und falls nicht, führen Sie sie aus/starten Sie sie neu.
Kann mir jemand Informationen dazu geben, wie das geht?
Akzeptierte Antwort:
Ich möchte Davidanns Antwort erweitern, da Ihnen das Konzept eines Cron-Jobs neu ist. Jedes UNIX- oder Linux-System hat irgendwo eine Crontab gespeichert. Die Crontab ist eine reine Textdatei. Betrachten Sie Folgendes:(Aus dem Gentoo-Wiki auf 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"
Diese Crontab sollte jede Minute jeder
Stunde jeden Tages jeden zweiten Monat „Ich mag Cron wirklich“ ausgeben. Natürlich würden Sie das nur tun,
wenn Sie cron wirklich mögen. Die Crontab gibt im Januar und Februar jeden Tag um 16:30 Uhr „I like cron a
little“ aus. Außerdem wird am 1. Januar um 3:10 Uhr
„Ich mag Cron nicht wirklich“ ausgegeben.
Als Cron-Neuling möchten Sie wahrscheinlich die markierten Spalten kommentieren, damit Sie wissen, wofür jede Spalte verwendet wird. Jede Cron-Implementierung, die ich kenne, war immer diese Reihenfolge. Jetzt füge ich Davidanns Antwort mit meiner kommentierten Datei zusammen:
#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/the.lock
Wenn Sie keinen Wert in jede Spalte eingeben, lautet die Standardeinstellung:
Jede Minute jeder Stunde jeden Tages jeden Monats die ganze Woche lang, –> jede Minute das ganze Jahr lang.
Wie Davidann feststellt, stellt die Verwendung einer Sperrdatei sicher, dass nur eine Kopie des PHP-Interpreters ausgeführt wird, php parse_tweets.php
ist der Befehl zum „Ausführen“ der Datei, und das letzte Bit der Zeile löscht die Sperrdatei, um für den nächsten Lauf bereit zu sein. Ich mag es nicht, jede Minute eine Datei zu löschen, aber wenn dies das gewünschte Verhalten ist, ist dies sehr akzeptabel. Das Schreiben und Überschreiben auf die Festplatte ist nur eine persönliche Präferenz