[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задержка запуска cron
Nikitian
Заметил, что запуск скрипта по крону идёт с задержкой около 2 секунд. Для данного скрипта это критично.
Запускаю скрипт командой
0 * * * *    php -r '/*some code*/ include_once("/path/to/script/index.php");'

В скрипте стоит
file_put_contents(dirname(__FILE__).'/starttimes.txt',date('H:i:s d.m.Y')."\n",FILE_APPEND);
По которому и определил наличие постоянной задержки в 2 секунды.
Для работы этого скрипта такая задержка критична, поэтому хотелось бы её исключить или как можно сильнее минимизировать.
Какие идеи?



Спустя 3 минуты, 16 секунд (28.05.2012 - 21:21) Игорь_Vasinsky написал(а):
может это время выполнения скрипта?
файл какого размера? просто время тратиться сначало на чтение, потом на добавление.

создавать такой файл 1 на 1 день

Спустя 3 минуты, 22 секунды (28.05.2012 - 21:24) alexbel2404 написал(а):
поставить на выполнение на 2 секунды раньше?)))))

Спустя 5 минут, 3 секунды (28.05.2012 - 21:29) Nikitian написал(а):
Цитата
может это время выполнения скрипта?

Время запуска пишется до активных действий скрипта. Сам скрипт может работать от 2 секунд до минуты, но это тут не при чём.

<?php
$timeline=microtime(true);
set_time_limit(600);
include_once(dirname(__FILE__).'/Functions.class.php');//Тут просто набор инструментов, без действий
file_put_contents(dirname(__FILE__).'/starttimes.txt',date('H:i:s d.m.Y')."\n",FILE_APPEND);//В этом месте пишется время запуска, а оно уже +2 секунды к требуемому по крону
/*далее полезный код*/


Цитата

поставить на выполнение на 2 секунды раньше?)))))

1. Минимальный интервал 1 минута у обычного крона. Ставить другой - не вариант.
2. Задержка плавает от 1 до 2 секунд. Критично исполнение кода в точно указанное время. Раньше нельзя ни на долю секунды, позже уже поздно.

Спустя 53 минуты, 31 секунда (28.05.2012 - 22:22) Игорь_Vasinsky написал(а):
Цитата
создавать такой файл 1 на 1 день

я уже написал что с FILE_APPEND - сначало чтение, потом запись - здесь и потери.

ОоОо

создавай prelog.txt, пиши всё в него (переписывай) - а следуюжей операцией считывай и дописывай оновной файл. wink.gif

Спустя 14 минут, 45 секунд (28.05.2012 - 22:37) Nikitian написал(а):
Цитата (Игорь_Vasinsky @ 28.05.2012 - 23:22)

я уже написал что с FILE_APPEND - сначало чтение, потом запись - здесь и потери.

С какого перепугу? Это аналог fopen() с модификатором "a" (не путать с модификатором "a+"). И в любом случае, не верю, что файл размером 20 байт читается 2 секунды...

Спустя 4 минуты, 12 секунд (28.05.2012 - 22:41) Игорь_Vasinsky написал(а):
у меня хотя бы логичное объяснение есть. попробуй 2 вариант, вместо эмоций, анализировать всё равно нужно.


Спустя 16 минут, 53 секунды (28.05.2012 - 22:58) Nikitian написал(а):
Извиняюсь, если был резок. Сейчас накропал тестовый скрипт, запускаемый каждую минуту
Свернутый текст

<?php
$micro = microtime(true)-time();
file_put_contents(dirname(__FILE__).'/pingertimes.txt',date('H:i:s d.m.Y').' '.round($micro,4)."\n");

Результат приблизительно такой же, как и с аппендом: "23:55:02 28.05.2012 0.0042" и "23:56:01 28.05.2012 0.1953"
Т.е. проблема таки не в коде, а в системе или кроне. Синхронизацию системного времени делал недавно, расхождение в сотые секунды.

Спустя 4 минуты, 52 секунды (28.05.2012 - 23:03) Игорь_Vasinsky написал(а):
что суппорт скажет? или VPS ? сам админишь?

Спустя 7 минут, 9 секунд (28.05.2012 - 23:10) Nikitian написал(а):
Мой сервак. Спросить не с кого sad.gif
Вот ещё статистика
23:56:01 28.05.2012 0.1953
23:57:01 28.05.2012 0.2473
23:58:01 28.05.2012 0.3016
23:59:01 28.05.2012 0.353
00:00:01 29.05.2012 0.5439
00:01:01 29.05.2012 0.8314
00:02:01 29.05.2012 0.9357
00:03:02 29.05.2012 0.0143
00:04:01 29.05.2012 0.0661
00:05:01 29.05.2012 0.1262
00:06:01 29.05.2012 0.9431
00:07:01 29.05.2012 0.9946
00:08:01 29.05.2012 0.056
00:09:01 29.05.2012 0.146
00:10:01 29.05.2012 0.2126
00:11:01 29.05.2012 0.8881

Спустя 9 минут, 41 секунда (28.05.2012 - 23:20) Игорь_Vasinsky написал(а):
так. а если задачу запускать не php скриптом? а башем?


Спустя 4 минуты, 58 секунд (28.05.2012 - 23:25) Nikitian написал(а):
Цитата (Игорь_Vasinsky @ 29.05.2012 - 00:20)
так. а если задачу запускать не php скриптом? а башем?

Всмысле не кроном? Но тогда точное время отследить практически нереально )
Вся задача - это дёрнуть некоторый урл, разобрать ответ (как правило json), посмотреть что пришло. Если пришло что-то стоящее, то сделать параллельно сотню запросов на урлы, исходя из предыдущего ответа, результаты записать в файлы. Реализовал на пыхе, ибо хз, как это написать чисто на баше. )

Спустя 30 минут, 42 секунды (28.05.2012 - 23:56) Игорь_Vasinsky написал(а):
мб и не реально, а перл?

Спустя 4 минуты, 22 секунды (29.05.2012 - 00:00) Nikitian написал(а):
Не реально, перлом не владею )
Вижу тут 2 варианта причины задержки:
1) Неточность крона.
2) Долгий запуск php.
Против 2 пункта говорит то, что в этом случае комбинация работы php как cgi была бы нерабооспособна из-за минимум секундной работы скрипта, что много.

Спустя 7 минут, 3 секунды (29.05.2012 - 00:07) vital написал(а):
Ну как бы пока процесс содаться, пока выполнится, пока блины винт прокрутятся..

Купите SSD диск, время уменьшится.

Еще возможно для консольной верии пхп стоит убрать все лишние расширения что бы он их не грузил => стартовал быстрее.

Спустя 8 минут, 44 секунды (29.05.2012 - 00:16) Nikitian написал(а):
SSD вещь хорошая, но для серваков, имхо, абсолютно ненужная. Лучше уж SASовые винты на привычных блинах поставить, а не пытаться адаптироваться к новым нестабильным веяниям.
А по поводу модулей - бьюсь головой о стол - как мог об этом забыть?!! (: Ща попробую подсунуть облегчённый php.ini, думаю должен быть эффект.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.