Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

прерзапуск задачи на сервере при ошибке выполнения


Recommended Posts

Здравствуйте. Хочу раз в день обновлять базу из xml файла (уже писал).Возникло 2 вопроса.

1. Если позиций много, то php вылетает с ошибкой переполнения памяти, если делать одним запросом. Делаю  LIMIT $step,100 в запросе и вызываю ajax_ом увеличивая $step, пока не кончится. Правильно делаю или надо как то по другому?

2. Задачу запускаю планировщиком. Как правильно перезапустить задачу через какое то время, если она закончилась ошибкой(например временно упал ftp сервер или еще чего)? Можно передавать планировщику ошибку и перезапустить или надо запускать один раз , а при ошибке перезапускать в самом php,через sleep(3600)?

Спасибо заранее.

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...
В 09.11.2019 в 06:09, PeletonTver сказал:

1. Если позиций много, то php вылетает с ошибкой переполнения памяти, если делать одним запросом. Делаю  LIMIT $step,100 в запросе и вызываю ajax_ом увеличивая $step, пока не кончится. Правильно делаю или надо как то по другому?

 

Ну если в кратце то надо делать по частям.

А вообще для начала, надо читать xml так, чтобы она не считывалась вся в память. Для этого есть потоковое чтение, погугли на тему XMLReader.

Затем обновление в БД, тоже да по частям, но на самом деле в зависимости от ситуации.

Исходя из этого не обязательно несколько раз ajax-ом вызывать скрипт. Правильнее сделать один запуск скрипта и в нем потоком читать xml, накапливать в памяти приемлемое количество информации, затем писать/обновлять ее в БД, затем продолжать потоковое чтение и т.д.

 

В 09.11.2019 в 06:09, PeletonTver сказал:

2. Задачу запускаю планировщиком. Как правильно перезапустить задачу через какое то время, если она закончилась ошибкой(например временно упал ftp сервер или еще чего)? Можно передавать планировщику ошибку и перезапустить или надо запускать один раз , а при ошибке перезапускать в самом php,через sleep(3600)?

 

Например надо xml обрабатывать раз в час. Я бы сделал отдельный скрипт(2), который проверял бы работу первого. Т.е. есть скрипт(2), который по планировщику стартует каждые полчаса. Он читает из БД временную метку, смотрит если она поставлена более чем полчаса назад, то запускает первый скрипт(1), который собственно читает xml.

А первый скрипт(1), в свою очередь когда все успешно завершил обновляет эту временную метку в БД, текущим временем.

Т.е. если метка вовремя не обновилась, то скрипт(2) запустить скрипт(1), а если метка обновлена (что значит, что скрипт(1) когда-то успешно отработал в этом часу), то скрипт(2) не будет запускать скрипт(1) в этом своем запуске, а сделает это в следующий еще через полчаса. Надеюсь идея понятно, а детали это уже Вам решать

Надіслати
Поділитися на інших сайтах


Спасибо! У меня главная беда была с непониманием  php-cgi. Запускал просто скрипт php и получал ошибку времени выполнения и прочие гадости. Теперь понимаю))

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.