GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Cron-Job zum Überprüfen, ob das Php-Skript ausgeführt wird, wenn nicht, dann ausführen?

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.

Verwandt:Linux – Läuft eine ausführbare Linux-Datei, die auf einer „Variante“ von Linux kompiliert wurde, auf einer anderen?

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


Linux
  1. Cron-Job wird nicht ausgeführt?

  2. Shell-Skript parallel ausführen

  3. Godaddy Cron-Job-Setup zum Ausführen von PHP-Skripten

  4. Linux-Befehl, um zu prüfen, ob ein Shell-Skript ausgeführt wird oder nicht

  5. CronJob läuft nicht

So führen Sie ein Python-Skript in PHP aus

Wie stelle ich den Cron-Job so ein, dass er ein PHP-Skript in cPanel ausführt?

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?

Cron-Job läuft manchmal nicht

Cron-Job nicht ausführen, wenn er bereits ausgeführt wird

Wie führe ich Cron-Jobs jeden Tag zu einer bestimmten Stunde aus?