Я пытаюсь запустить команду ниже в фоновом режиме, используя supervisord
:
php /home/instacheeta/artisan queue:work --timeout=120
После установки службы Supervisor на моем сервере, определения ее конфигурации и запуска в базе данных не произошло никаких изменений, указывающих на то, что Supervisor запускает PHP-приложение.
Конфигурация моего супервизора:
[program:instacheeta]
process_name=%(program_name)s_%(process_num)s
command=php /home/instacheeta/artisan queue:work --timeout=120
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/home/instacheeta/worker.log
queue:work
срабатывает после cronjob
каждой минуты работы и работает до конца.
cronjob
работает отлично; я проверил это в своей базе данных, чтобы убедиться, что новые данные сохраняются каждую минуту. К сожалению, супервизор, похоже, не запускает определенную команду.
Я не получаю никаких ошибок на worker.log
. Другая информация для устранения неполадок:
[root@host instacheeta]# ps aux|grep supervisor
root 3267 0.0 0.2 219784 12992 ? Ss 11:47 0:02 /usr/bin/python /usr/bin/supervisord
root 18279 0.0 0.0 112680 948 pts/0 S+ 14:38 0:00 grep --color=auto supervisor
Не удалось добавить программу в supervisorctl
:
[root@host instacheeta]# supervisorctl add instacheeta
ERROR: no such process/group: instacheeta
Статус руководителя:
[root@host instacheeta]# supervisorctl status
[root@host instacheeta]#
решение1
Необходимо перезагрузить конфигурацию супервизора.
Для этого есть два способа:
Перезапустите
supervisor
службу с помощьюservice
инструмента (service supervisor restart
). Это вызовет все контролируемые процессы, но поскольку в данный момент у вас нет запущенных таких процессов, это не проблема.Попросите
supervisor
демона динамически перезагрузить его конфигурацию из файлов конфигурации. Запуститеsupervisorctl reread
с последующимsupervisorctl update
обновлением конфигурации. Теперь вы можете использоватьstart
для запуска программы илиstatus
просмотра ее статуса.
supervisor
не является cron
!
В своем вопросе вы утверждаете:
cronjob
работает отлично; я проверил это в своей базе данных, чтобы убедиться, что новые данные сохраняются каждую минуту. К сожалению, супервизор, похоже, не запускает определенную команду.
Имейте в виду, что если ранее у вас был cronjob, который вызывал команду в регулярном цикле, то он supervisor
не будет делать этого без внешнего вмешательства или если только программа не завершит работу после завершения работы. Supervisor обычно предназначен для вызова двоичных файлов, предоставления службы и продолжения работы после запуска.
Я бы рекомендовал изменить приложение так, чтобы оно запускалось один раз и имело внутренний график, по которому оно выполняет все необходимые действия с базой данных.