2013-07-31 2 views
0

Я пытаюсь запланировать процесс, я сохранил его на таблице, которая включает в себя нужное время для запуска.Создание заданий cron

Я просто не знаю, как подойти к этому, должен ли я создать запись для каждого созданного пользователем процесса или просто создать одну запись, которая запускает скрипт каждые X минут, который проверяет БД для процессов, которые должны быть запущены и запускать их?

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

+0

У вас есть Linux-сервера с CPanel? – Sir

+0

Я бы предпочел решение для агностики платформы. – localhost

+0

платформа как нет cpanel, или платформа как в окне/mac/linux? – miah

ответ

1

Вы можете определить необходимость (или нет) несколько свойств первого:

  • Устойчивость против отказа сценария
  • Locking (один экземпляр сценария) в случае необходимости
  • Простота управления
  • Возможность следить за зависимостями (A должен быть запущен до B)
  • Возможность подъема на ботинок без ручного вмешательства
  • Нет голодание интерактивной работы фоновым обработает

Учитывая это, я обычно использую следующую схему:

  • Создать планировщик клеща одного уровня ОС, который запускает мастер, скрипт каждые п секунд (Cron , Планировщик Windows, что угодно).Это будет вашей единственной конкретной платформы часть
  • Если на уровне ОС планировщик слишком груба, планировать сценарий оболочки, который запускает скрипт работник несколько раз запланированную usleep(), пока зернистость на уровне ОС не будет достигнута
  • Внутри рабочий сценарий в первую очередь сделать бухгалтерию: Написать flagfile или, если он существует, проверьте его на остановленном-рабоче-тупик, возможно, предупреждая об ошибке
  • После этого начать цикл:
    • DEQUEUE одна работы пункт (зависимость и последовательность идут здесь), маркировка его как начата
    • запустить этот рабочий элемент, маркировка его как полный
    • обновление вашей flagfile, чтобы показать свой прогресс
  • когда finsihed, убить flagfile и конец

У меня были хорошие результаты с этим подходом для довольно некоторых рабочих нагрузок только для опроса.

Редактировать

Забыли одно: Если вы хотите параллелизм, просто начните parallaelable рабочие элементы одновременно

0

Я думаю, что вы должны создать запись для каждого созданного пользователем процесса, поэтому «тяжелая» работа выполняется cron, которая была создана для этого. Кроме того, для другого подхода вам понадобится запустить скрипт, который проверяет БД на период, достаточно маленький, чтобы любой созданный пользователем процесс выполнялся по расписанию.

+0

Ну, я думаю, что 10-минутный интервал должен быть достаточным. Одна вещь, которую я только что понял, заключается в том, что добавление каждого процесса в cron не будет очень легко достигнуть на мультиплатформенном подходе. – localhost

+0

@ user2553780 Не уверен, что это проблема в вашей системе, но если у вас много пользователей и многие процессы для запуска, вы можете ввести нежелательную дополнительную нагрузку на ваш сервер каждые 10 минут. Но все равно зависит от вашего целевого приложения. – user2553780

Смежные вопросы