cron php каждую секунду

CRON запуск каждые 10 секунд

Нужно запускать крон каждые 10 секунд. Ответ нашел только в том,что бы сделать 5 экземпляров задачи и слип на 10,20,30,40 и 50 сек соответственно. Но проблема в том,что не могу слип в кроне сделать. Подскажите как.

3 ответа 3

Вы можете делать даже так:

Возникает проблема слежения за этим процессом и т.д. Мне хотелось бы все же показать вам один из путей, который намного проще, чем-то с чем вы решили связаться.

Cron сам по себе не очень подходит для данной задачи, потому что мы знаем что минимальный интервал работы составляет 1 минуту, но на этом минусы крона для вашей задачи не закачиваются, если ваш воркер начнет задумываться, это создаст лавинный эффект процессов, что в один момент без должной блокировки на уровне скрипта вызовет повышенное использование ресурсов и создаст непредсказуемые результаты, особенно если воркер работает с базой.

Я бы рекомендовал вам для вашей задачи SystemD (если конечно он у вас стоит или есть возможность установить), и скажу почему:

Создаем два файла:

Выполняем запуск:

Проверяем статус:

Полезные команды

Это далеко не полная информация о настройке через SystemD, очень подробное описание есть вот тут.

Конечно, есть еще вариант, что вы можете переписать своего демона и сделать его запуск каждые 10 секунд на уровне программного кода, а SystemD настроить так, что он будет следить за его состоянием, и если он «упадет», то зафиксирует это и перезапустит его.

Решение в целом зависит от конкретной задачи.

Источник

Как запускать cron чаще, чем раз в минуту при помощи PHP

Классический конфиг — файл с записями cron jobs в операционной системе Linux, выглядит следующим образом:

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

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

Для многих задач выполнение команды нужно намного чаще, например раз в 10 секунд. Для некоторых задач по автоматизации бизнес процессов максимально допустимая задержка часто составляет не более чем 1-1.5 секунды.

Разумеется, классический cron для этого не подходит — его нужно усовершенствовать.

Ниже представлена пошаговая реализация по созданию дополнительного функционала (на языке PHP) к классическому cron на Linux с применением дополнительной защиты от повторного запуска процессов.

Постановка задачи и настройка cron

Для примера будем использовать следующую задачу:

Итак, cron настроим в его максимальном виде, т.е. раз в минуту:

Выполнение одного цикла

Изначально следует определиться, с какой частотой мы будем запрашивать новые задачи в базе данных — в зависимости от этого будет меняться количество циклов и логический сон (функция sleep )

В текущем примере используется шаг равный 10 секундам. Следовательно количество циклов 60 / 10 = 6. Итого, общий код выглядит следующим образом:

Уточнение: в данном примере используется шаг равный 10 секундам, который может обеспечить минимальный интервал выполнения скрипта один раз в 10 секунд. Соответственно, для более частого выполнения следует изменить количество циклов и «время на сон».

Читайте также:  Что такое предоставление персональных данных

Как избежать повторного выполнения задачи

В представленном виде есть одна неопределенность, а именно — повторное выполнение задачи в случае, если она уже начата. Это становится особенно актуально, если задача «сложная» и требует несколько секунд на ее реализацию.

Таким образом создается проблема повторного выполнения:

Но мы не будем нагружать базу данных: исходя из моего тестирования, MYSQL может принять запрос, но обработать его не сразу. Различие даже в 0.5 секунд может привести к повторному выполнению — что категорически не подходит.

Также в данном случае речь идет всего лишь про статусы задач, поэтому лучше будем использовать файловую систему сервера.

Основная модель проверки строится при помощи flock — функции, которая ставит и снимает блокировку с файла.

В исполнении PHP работу функции можно представить следующим образом:

Результат

Общий вид всего цикла выглядит следующим образом:

Таким образом, подобный алгоритм позволяет запускать цикличное выполнение обработки задач и не беспокоится, что задача будет обработана более одного раза.

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

Источник

Как запустить Cron-задачу чаще минуты?

Здравствуйте. Подскажите, как запустить php-скрипт в CronTab чаще одного раза в минуту?

Видео такое решение:

Запускаем задачу раз в 20 секунд:

Запускаем задачу раз в 15 секунд:

Очень важно запускать скрипт каждые 15-30 секунд.

Как реализовать на BeGet.com?

ThunderCat: через жо? О, у меня есть решение. Только что придумал 🙂 Я бы так не стал делать, но если топикстартеру очень хочется, то:

Запускаем раз в минуту по крону скрипт, который форкает ( php.net/manual/ru/function.pcntl-fork.php ) себя раз в 15 секунд (sleep).

Почему бы просто не запустить долгоиграющую задачу, которая будет проверять время и в нужные моменты исполнять требуемое действие?

Поясните, долго ли исполняется эта частая задача? Всегда ли гарантированно уложится в 15 секунд? Если есть риск наложения соседних исполнений из-за слишком долгого выполнения первого из них, понадобится где-то хранить время предыдущего запуска и флаг состояния «выполняется прямо сейчас» / «свободно».

Источник

Запуск cron каждые 30 секунд

хорошо, поэтому у меня есть cron, который мне нужно запускать каждые 30 секунд. вот что у меня ниже

это работает, но это 30 минут или 30 секунд. а также я читал, что cron может быть не лучшим инструментом для использования, если я запускаю его так часто. Есть ли другой лучший инструмент, который я могу установить на ubuntu 11.04, который будет лучшим вариантом или есть способ исправить выше cron

14 ответов

вы */30 на минут спецификатор-это означает каждую минуту, но с шагом 30 (другими словами, каждые полчаса). С cron не идет вниз к югу минутах резолюций, вам придется найти другой способ.

одна возможность, хотя это немного kludge, состоит в том, чтобы иметь два задания, одно смещение на 30 секунд:

вы не можете. Cron имеет зернистость 60 sec.

гранулярность Cron в минутах и не было предназначен для пробуждения каждого x секунд, чтобы запустить что-то. Запустите повторяющуюся задачу в цикле, и она должна делать то, что вам нужно:

Читайте также:  мама не верит что у меня панические атаки

нет необходимости в двух записях cron, вы можете поместить его в один с:

Так в вашем случае:

вы можете проверить мой ответ этот же вопрос

в основном, я включил туда скрипт bash с именем «runEvery.sh» который вы можете запускать с cron каждую минуту и передавать в качестве аргументов реальную команду, которую вы хотите запустить, и частоту в секундах, в которых вы хотите ее запустить.

/bin/runEvery.sh 5 myScript.sh

задание Cron нельзя использовать для планирования задания в секундном интервале. я.вы не можете запланировать задание cron для запуска каждые 5 секунд. Альтернативой является написание сценария оболочки, который использует в нем.

создать сценарий оболочки every-5-seconds.sh использование цикла bash while, как показано ниже.

теперь выполните этот сценарий оболочки в фоновом режиме с помощью nohup как показано ниже. Это будет продолжать выполнять сценарий даже после выхода из сеанса. Эта воля выполнить backup.sh сценарий оболочки каждые 5 секунд.

создать создать файл excute_per_30s

будет работать cron каждые 30 секунд

задание Crontab можно использовать для планирования задания в минутах / часах / днях, но не в секундах. Альтернатива:

создать скрипт для выполнения каждые 30 секунд:

Спасибо за все хорошие ответы. Чтобы сделать его простым, мне понравилось смешанное решение с контролем на crontab и разделением времени на скрипте. Так вот что я сделал, чтобы запускать скрипт каждые 20 секунд (три раза в минуту). Crontab line:

мне просто нужно было выполнить аналогичную задачу и использовать следующий подход:

это здесь, чтобы быть уверенным, что я не потеряю выполнение часов, если я потеряю оболочку (сетевая проблема, сбой windows и т. д. )

nano every30second.sh

затем установите cron для этого скрипта crontab-e

Если вы хотите запустить скрипт в течение 5 секунд, замените 30 на 5 и измените цикл следующим образом: For (( i=1; i

когда вы выберите для любой секунды, затем вычислите 60 / вашу секунду и напишите для цикла

Источник

Запуск PHP скрипта по расписанию cron. Когда не всё так ясно

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

Немного теории по этим ссылкам: тут и тут, для тех хочет освежить память.

Случай первый


В настройках операционной системы не указаны пути по умолчанию. Как следствие следующая команда в cron не будет выполнена.

Правильной командой будет второй вариант, где мы пропишем полный путь до интерпретатора php.

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

В команде для выполнения в cron прописывается путь к скрипту и только. В скрипте ставятся символы #!, а дальше просто пишем нужные нам команды на языке bash.

Читайте также:  запах лемонграсса на что похож
Случай второй


Выполнение скрипта при запросе из браузера приводит к выводу страницы в браузер. А при выполнении скрипта через cron приводит к выводу текста страницы в командную строку. Тут может быть несколько вариантов. Система может быть настроена на сохранение результатов вывода в консоль в виде файла. Причем файл этот может размешаться не в самом типичном месте. Постепенно это может забить всё пространство на диске. Часто под сайт дают место в 1 Гигабайт, 500 мегабайт. И даже встречались хостинги с 50 и 10 мегабайт под сайт.

Как вариант, вывод может быть перенаправлен на почтовый ящик, который заботливый хостер ненавязчиво подарил вам и прописал в настройках хостинга как email по умолчанию. При каждом выполнении скрипта весь текст, выводящийся в консоль, будет оформлен в письмо. Проблемы могут начаться неожиданно. Если задание cron выполняется часто, а у почты хостинга прописано ограничение на количество писем в день, почта просто ляжет (заблокируется провайдером как потенциальный спамер). И как неприятные последствия вы получите отказ в регистрации пользователей, уведомление пользователей и д.р., что подвязано на почту.

Решение старо как мир. Нужно сделать перенаправление вывода из консоли в пустоту. Делается это добавлением команды в конце команды крона.

Иногда админы хостинга берут на себя обязанность ненавязчиво поставить их за пользователя. Тут тоже может быть подводный камень.

Случай третий


Ситуация проста. Нужно отладить скрипт, запускаемый планировщиком. Можно попытаться сделать это средствами php, заставлять скрипт писать логии и т.п. Но есть способ куда проще, нужно перенаправить вывод в файл. Команда проста, дополнительный параметр к нашей команде:

Её надо добавить в конце команды:

Знак «>» указывает системе о перенаправлении вывода. Далее имя файла. В нашем случае указан абсолютный путь. Этот пример не составляет труда найти в интернете. Но тут нас может поджидать неприятность, вытекающая из второго случая. Заботливый хостер автоматически добавляет перенаправление вывода в конце нашей строки. И иногда маскирует это. В итоге получается команда вида:

В итоге вывод снова перенаправлен в пустоту и выходной файл будет пуст. Тут хостеру можно указать на его ошибку, что он уж слишком перехитрил с настройками. А можно сразу воспользоваться костылём. После команды перенаправления в файл закончить команду символами &&. Эти два символа используются в командной строке для объединения нескольких команд в одной строке. Они дают командной строке понять, что команда окончена и дальше идет следующая команда. К ней и применяется перенаправление в пустоту. В итоге и перенаправление в пустоту осталось и лог файл записан верно. Пример команды:

Случай четвёртый

Первое, что находишь в интернете по этой проблеме – совет прописать в кроне команду смены директории:

Но в каких-то случаях это не помогает. Выход есть. Один из них взять всё в свои руки и задать недостающее окружение для работы скрипта. Информации про это в интернете уже больше.

Иногда просто хватает вписать следующий код в начале скрипта и пути снова становятся рабочими.

Как видите, всё прописано функциями и утруждаться настройками не надо.

Источник

Образовательный портал