Я пытаюсь запустить приведенную ниже команду в фоновом режиме, используя supervisord
:
php /home/instacheeta/artisan queue:work --timeout=120
После установки службы супервизора на моем сервере, определения ее конфигурации и ее запуска в базе данных нет никаких изменений, указывающих на то, что супервизор запускает приложение 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]#
Необходимо перезагрузить конфигурацию супервизора.
Для этого есть два метода:
Перезапустите supervisor
сервис с использованием service
инструмент (service supervisor restart
). Это вызовет все контролируемые процессы, но, поскольку в настоящее время у вас нет таких запущенных процессов, это не проблема.
Спроси supervisor
демон для динамической перезагрузки своей конфигурации из файлов конфигурации. Бегать supervisorctl reread
с последующим supervisorctl update
для обновления конфигурации. Теперь вы можете использовать start
чтобы запустить программу, или status
для просмотра его статуса.
supervisor
не является cron
!В своем вопросе вы заявляете:
cronjob
работает отлично; Я проверил это в своей базе данных, чтобы убедиться, что новые данные хранятся каждую минуту. К сожалению, похоже, что супервизор не выполняет заданную команду.
Имейте в виду, что если раньше у вас была cronjob, которая вызывала команду в обычном цикле, supervisor
не сделает этого без внешнего вмешательства или если программа не завершит работу после завершения работы. supervisor обычно предназначен для вызова двоичных файлов, предоставляет службу и продолжает работать после запуска.
Я бы порекомендовал изменить приложение, чтобы оно запускалось один раз и имело внутренний график, по которому оно выполняло все необходимые действия с базой данных.