Como evitar que o script PHP seja executado mais de uma vez?
Atualmente, tentei impedir umaonlytask.php
script da execução mais de uma vez:
$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);
e há um cron job para executar o script acima a cada minuto:
* * * * * php /usr/local/src/onlytask.php
Isso funciona por um tempo. Depois de alguns dias, quando faço:
ps auxwww | grep onlytask
Eu descobri que existemdois instâncias em execução! Não três ou mais, nem um. Eu matei um dos casos. Depois de alguns dias, hádois instâncias novamente.
O que há de errado no código? Existem outras alternativas para limitar apenas uma instância do onlytask.php em execução?
p.s. minha/tmp/
a pasta não está limpa.ls -al /tmp/*.lock
mostre que o arquivo de bloqueio foi criado no primeiro dia:
-rw-r--r-- 1 root root 0 Dec 4 04:03 onlyme.lock