Wie kann man verhindern, dass ein PHP-Skript mehrmals ausgeführt wird?

Derzeit habe ich versucht, eine zu verhindernonlytask.php Skript kann nicht mehrmals ausgeführt werden:

$fp = fopen("/tmp/"."onlyme.lock", "a+");
if (flock($fp, LOCK_EX | LOCK_NB)) {
  echo "task started\n";
  //
    while (true) {
      // do something lengthy
      sleep(10);
    }
  //
  flock($fp, LOCK_UN);
} else {
  echo "task already running\n";
}
fclose($fp);

und es gibt einen Cron-Job, der das obige Skript jede Minute ausführt:

* * * * * php /usr/local/src/onlytask.php

Es funktioniert für eine Weile. Nach ein paar Tagen, wenn ich mache:

ps auxwww | grep onlytask

Ich habe festgestellt, dass es gibtzwei Instanzen laufen! Nicht drei oder mehr, nicht einer. Ich habe eine der Instanzen getötet. Nach ein paar Tagen gibt eszwei Instanzen wieder.

Was ist falsch im Code? Gibt es andere Alternativen, um nur eine Instanz der onlytask.php einzuschränken?

p.s. meine/tmp/ Ordner wird nicht aufgeräumt.ls -al /tmp/*.lock Zeigen Sie, dass die Sperrdatei am ersten Tag erstellt wurde:

-rw-r--r--  1 root root    0 Dec  4 04:03 onlyme.lock

Antworten auf die Frage(6)

Ihre Antwort auf die Frage