2015-03-12 4 views
0

У меня есть скрипт PHP, который после его запуска проверяет базу данных и запускает цикл некоторых URL-адресов (используя CURL для очистки сайтов). Я хочу, чтобы этот скрипт работал 24 часа в сутки. В настоящее время я использую cron для cPanel каждые 10 минут, но проблема в том, что иногда сценарий занимает больше 10 минут, и cron пытается открыть снова, что создает большой конфликт.Запуск Cron только в том случае, если скрипт не запущен

Что я хочу, это своего рода служба PHP или скрипт cron для запуска скрипта, только если он не работает.

+0

Почему вы даже хотите, чтобы он вообще перезапустился? Другими словами, если вы «хотите, чтобы этот скрипт работал 24 часа в сутки», почему бы не изменить его на цикл и никогда не прекращать? – Jordan

+0

Как мне это сделать? Он уже перебирает результаты базы данных. Я просто не знаю, как заставить его перезагружаться каждый раз, когда он заканчивает цикл через набор данных. –

+0

Ну, я не вижу ваш конкретный код, как правило, беру любой метод «высокого уровня», который вы вызываете один раз, чтобы выполнить всю вашу работу и поместить ее внутрь цикл, который петли навсегда (например, 'while (1) {doMyDatabaseCheckAndScrapeURLs();}'. Если вы отправляете свой код из скрипта PHP, я, вероятно, мог бы дать вам более конкретный пример. – Jordan

ответ

0

Вы можете использовать поля базы данных для управления выскабливанием интервалов и назначить выскабливание статуса (как «активные», «сделано» и т.д.), вы можете также использовать файл блокировки, то вроде:

<pre> 
// define name for lock 
$lock_name = "/location/on/server/imworking.loc"; 

// exit script if lock file exists 
if( is_file($lock_name )) exit ('Lock file exists, lets exit here!); 

// create new lock file before doing your things 
$lock_file = fopen($lock_name, "w"); 
fwrite($lock_file , "working"); //this isn't really needed.. 
fclose($lock_file); 


// do your stuff here, you can use try/catch statements as 
// errors may prevent deleting lock file and so starting script again 

//your stuff finished so let's remove lock file 
unlink('/location/on/server/imworking.loc'); 
</pre> 
Смежные вопросы