Назад | Перейти на главную страницу

Супервизор - как заставить программу запускаться через определенные промежутки времени

Возможно, я не понимаю, что такое Supervisor, но, возможно, я задаю этот вопрос, чтобы прояснить это. По сути, у меня в файле /etc/supervisord.conf есть программа Supervisor, которая выполняет сценарий bash, который просто выполняет сценарий PHP. Мне удалось успешно запустить этот bash-скрипт из супервизора только после запуска супервизора. Однако разве не суть чего-то вроде супервизора в том, что он запускает эти задачи в фоновом режиме с заданными интервалами или что-то в этом роде, чтобы я мог знать, что он всегда работает и обрабатывает любые задачи, которые могут потребоваться в соответствии с выполняемым им скриптом?

Вот программа в моем файле conf:

[program:program_name_d]
command=/path/to/runme
process_name=%(program_name)s
numprocs=1
autostart=true

Мне кажется, что то, что вы на самом деле ищете, ближе к cron. Я не знаком с супервайзером, но из предоставленного описания Вот, похоже, он пытается заменить пользовательское пространство для определенных аспектов init. Под этим я подразумеваю, что он направлен на обеспечение:

  • запуск / остановка / перезапуск служб (программ)
  • Автоматическое обнаружение сбоя программы и перезапуск
  • Контроль порядка запуска различных программ при загрузке.
  • Делегирование управления службами людям, которые с ними работают (то есть предоставление веб-разработчикам прав на перезагрузку веб-сервера).

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

В моей компании мы используем скрипты Python для выполнения точно таких же задач по запуску скриптов PHP через повторяющиеся промежутки времени. Итак, что вам нужно сделать в общем:

  1. Создайте сценарий, который принимает файл, который нужно выполнить, и интервал в качестве параметров.
  2. Создайте цикл While или лучше, какую-то выполняемую задачу, которая выполняется постоянно и имеет обработку завершения работы на случай, если задача неожиданно завершится. Заставьте задачу выполнить целевую программу и дождаться интервала. Не забывайте подождать, пока ваша цель не завершит выполнение, прежде чем ждать.
  3. В Supervisor установите промежуточный сценарий в качестве цели и укажите параметры. Если вы создали реализацию goog, вы сможете использовать этот сценарий для нескольких сценариев, которые могут выполняться одинаково.
  4. Обновите свою конфигурацию супервизора и запустите процесс.

Тада: У вас есть процесс, похожий на cronjob, который запускается и контролируется супервизором.

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