javascript — PHP Script для повторного запуска до завершения процесса, а затем перезапускается каждую неделю

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

Мое текущее решение для этого:

  • Планировщик задач для windows открывает страницу php раз в неделю.
  • Когда скрипт запускается и завершается, javascript заставляет страницу перезапуститься через 5 секунд после завершения.
  • Когда последний раз скрипт запускается, он удаляет перезагрузку страницы и останавливает ее.

Проблема с этим решением состоит в том, что оно открывает новое окно браузера каждую неделю. Есть ли хорошие альтернативные способы сделать это без необходимости вручную закрывать браузер?

Причиной повторного запуска скрипта являются настройки тайм-аута скрипта максимального лимита php-сервера и возможность после каждого запуска видеть состояние, произошла ли какая-либо ошибка.

Я не использую cron, так как это потребовало бы сделать очень много опросов, чтобы запустить процесс в течение 5 секунд после последнего запуска. Для еженедельного запуска скрипта я предполагаю, что он не будет работать, пока скрипт использует javascript для повторного запуска?

0

Решение

С помощью PHP:

<?php

// increase the maximum execution time to 43200 seconds (12 hours)
set_time_limit(43200);

function runTask() {
static $cycles = 0;

// do whatever you need to do

// Increments cycle count then compares against limit
if ($cycles++ < 180)  {
sleep(5);  // wait five seconds
runTask(); // run it again
}
}

runTask(); // fire up the loop

Или, если вы поклонник Javascript …

С помощью node.js:

var cycles = 0;

function runTask() {
// do whatever you need to do

// Increments cycle count then compares against limit
if (cycles++ < 180) {
setTimeout(runTask, 5000); // run again in 5000 milliseconds
}
}

runTask(); // fire up the loop

Оба решения не будут запускать функцию снова в течение 5 секунд после каждой итерации.

Просто попросите вашего бегуна выполнить любой скрипт напрямую; нет необходимости в браузерах.

0

Другие решения

Других решений пока нет …