Автор Тема: Cron перестает запускать процесс.  (Прочитано 5512 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
*/2 * * * * a=''; a=`ps axl | grep import_sunmar_price.ph[p] | awk {'print $3'}`; if [ -z $a ]; then echo 'restart'; exec /var/www/gate-32/htdocs/bitrix/crontab/sunmar_list_index; else echo 'work'; fi

Есть вот такой вызов по крону скрипта (если процесс не запущен, то запускать). Скрипт скачивает с ftp файл и парсит его. После выполнения Записывается в базу время начала и время конца скрипта. Он идет около 10 мин. Поставил его вечером, статистика такая:
Выполнялся каждые 10 мин, примерно до часа ночи. Запись о том, что скрипт закончился есть. Далее процесс запуска крона почему-то остановился. Записей больше не было. Проснулся утром - в htop процесса нет (делаю от root). Запустил его вручную - процесс пошел. Опять каждые 10 мин. Если бы не было связи с ftp - скрипт сам бы начал запускаться после "поднятия" ftp. А я его запускал вручную - что может быть? И как протестировать причины? (оповещение на мыло с крона поставить пробовал - письма не приходят)
Лог пишет:
Jul 15 02:14:01 unknown-6335 crond[30195]: (root) CMD (a=''; a=`ps axl | grep import_sunmar_price.ph[p] | awk {'print $3'}`; if [ -z $a ]; then echo 'restar$ - показывает, запись (в таблице нет записи о выполнении) - т.е. после прохождения скрипта полюбому делается запись о выполнении в бд. Как могло произойти то, что записис в бд нет - скачанных данных нет (файл качает данные). Правильный ли синтаксис

Мне кажется, что может быть проблема в инструкции. можно ли как-то написать инструкцию так, чтобы он проверял - например, если процесс идет больше 20 мин, то kill процесс?

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Cron перестает запускать процесс.
« Ответ #1 : 15 Июля 2011, 12:39:46 »
Ну во-первых - что за ОС.
Второе -
ps axl | grep чтототам
с большой вероятностью поймает сам процесс grep.
Ну и третье - не легче ли всё это собрать в один скрипт на bash к примеру, с логированием куда-нить?
можно ли как-то написать инструкцию так, чтобы он проверял - например, если процесс идет больше 20 мин, то kill процесс?
Только другой программой-мониторилкой. Или делать многопоточный/многопроцессный скрипт, что сложнее.
Not as ultimate as 42, but pretty close...

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 425
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Cron перестает запускать процесс.
« Ответ #2 : 15 Июля 2011, 13:04:28 »
с большой вероятностью поймает сам процесс grep.
99% что проблема именно в этом
Делать надо так:
ps axl | grep чтототам | grep -v grep
А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Cron перестает запускать процесс.
« Ответ #3 : 15 Июля 2011, 13:07:54 »
Делать надо так:
ps axl | grep чтототам | grep -v grep
Практически везде уже есть pgrep. Рекомендовано использовать его.
Not as ultimate as 42, but pretty close...

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 425
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Cron перестает запускать процесс.
« Ответ #4 : 15 Июля 2011, 13:14:30 »
Практически везде уже есть pgrep.
Однако не везде. Я вообще сторонник чистого posix в shell скриптовании. Оно как-то переносимее получается.
А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Cron перестает запускать процесс.
« Ответ #5 : 15 Июля 2011, 13:21:51 »
ОС - Free bsd
Если процесс продолжал выполяться - могло ли это не отображаться в htop?

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Cron перестает запускать процесс.
« Ответ #6 : 15 Июля 2011, 13:27:22 »
Практически везде уже есть pgrep.
Однако не везде. Я вообще сторонник чистого posix в shell скриптовании. Оно как-то переносимее получается.
Тогда надо не ps ax а таки ps -ax  ;)
ОС - Free bsd
Если процесс продолжал выполяться - могло ли это не отображаться в htop?
Нет. Но в целой куче процессов в htop можно легко не заметить нужный процесс.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Cron перестает запускать процесс.
« Ответ #7 : 18 Июля 2011, 09:41:41 »
Я искал его по поиску. Вот опять у меня завис процесс - ночью) Скрипт выполняет запись из одной таблицы в другую - т.е. с др. серверами не связан. Что можно сделать, если процесс завис? (автоматизированно - чтобы сам завершался) - Очень хотелось бы получить синтаксис, если это можно прописать через bush скрипт или в инструкции крона

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Cron перестает запускать процесс.
« Ответ #8 : 18 Июля 2011, 09:43:09 »
Тьфу - всмысле shell скрипт

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Cron перестает запускать процесс.
« Ответ #9 : 18 Июля 2011, 09:48:25 »
Что можно сделать, если процесс завис?
Зависит от того, в каком статусе он завис. Возможно происходят блокировки в базе, тогда сам процесс скрипта убить можно, а вот запрос просто так без перезапуска СУБД не факт.
А вообще - побольше конкретики. Иначе разговор получается о каких-то сферических скриптах в вакууме, которые зависают в непонятном состоянии  :D
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Cron перестает запускать процесс.
« Ответ #10 : 18 Июля 2011, 11:50:42 »
База скорее всего не блокируется - т.к. после завершения процесса он запускается и идет нормально. Могу кинуть сюда файл скрипта, только вот не знаю - пригодится ли он))

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Cron перестает запускать процесс.
« Ответ #11 : 18 Июля 2011, 11:57:53 »
Lexus1990, кидай, посмотрим.
И полезным делом будет допилить в скрипте логирование и посмотреть в каком таки месте затык. гадать конечно можно, но не факт что угадаешь верно ;)
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Cron перестает запускать процесс.
« Ответ #12 : 18 Июля 2011, 12:06:47 »
Вот скрипт, который переписывает из одной базы в другую записи) Вроде ничего сложного (при этом сравнивает с инфоблоками из битрикс). Переименуй файлик как скачаешь в php

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Cron перестает запускать процесс.
« Ответ #13 : 18 Июля 2011, 12:36:26 »
Lexus1990, битрикс такой битрикс  :facepalm2:
Советую повставлять в код вывод всякого дебага - типа контрольных точек. К примеру
echo "Checkpoint 1";
...
...
echo "Checkpoint 2";
...
и сделать перенаправление вывода скрипта  куда-то в /tmp/script.out
exec /var/www/gate-32/htdocs/bitrix/crontab/sunmar_list_index 2>&1 >> /tmp/script.out;
И когда залипнет - посмотреть до какого места скрипт доработал.
Битрикс он может составить достаточно дикий запрос...
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Cron перестает запускать процесс.
« Ответ #14 : 18 Июля 2011, 12:54:36 »
Т.е. вы предлагаете поставить контрольные точки, и, например, писать их в файл? (или в базу) - и отследить на каком месте остановился скрипт?