проверьте, правильно ли запущен скрипт cron - правильно ли регистрировать ошибки в пакетной обработке - PullRequest
0 голосов
/ 16 декабря 2011

Я установил cronjob для ежедневного запуска сценария.Этот скрипт извлекает список идентификаторов из базы данных, просматривает каждый из них, чтобы получить больше данных из базы данных, и генерирует XML-файл на основе полученных данных.

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

Я не уверен, как найти проблему, поскольку задание cron определенно выполняется, но не всегдаГенерация всех файлов XML.Любые идеи о том, как я могу определить эту проблему и быстро выяснить, какие файлы не были запущены.

Я подумал, что, возможно, добавлю поля timestart и timeend в базу данных и введу эти значения в начале и в конце каждого запускаемого генератора XML, чтобы я мог видеть, что работало, а что нет., но задавался вопросом, был ли лучший способ.

set_time_limit(0);

//connect to database
$db = new msSqlConnect('dbconnect');

$select = "SELECT id FROM ProductFeeds WHERE enabled = 'True' ";

$run = mssql_query($select);
while($row = mssql_fetch_array($run)){

    $arg = $row['id'];
    //echo $arg . '<br />';
    exec("php index.php \"$arg\"", $output);
    //print_r($output);

}

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Мое предложение было бы добавить некоторые записи в сценарий.Простой

error_log("Passing ID:".$arg."\n",3,"log.txt");

Может дать вам некоторую информацию о том, передается ли ID.Если вы обнаружите, что это так, вы можете ввести запись в файл index.php для дальнейшей оценки проблемы.

Кстати, вы можете объяснить, почему вы используете exec () для запуска сценария php?Почему бы не оправдать функцию в цикле.Это вполне может быть источником проблемы.

Потому что с exec я думаю, что процесс будет выполняться в фоновом режиме и цикл будет продолжаться, так что вы действительно можете задушить свой сервер таким образом, возможно, это тоже стоит попробовать.(Я думаю, что это также зависит от способа вывода:

Примечание: если программа запускается с этой функцией, чтобы она продолжала работать в фоновом режиме, вывод программы должен бытьперенаправляется в файл или другой выходной поток. В противном случае PHP будет зависать до тех пор, пока не закончится выполнение программы.

Возможно, другие пользователи могут прокомментировать это.

0 голосов
/ 19 декабря 2011

Оказалось, что у апача истекло время ожидания. Следовательно, нет ничего общего с использованием функции или функции exec ().

...