我终于设法让 supervisord 服务在服务器重新启动时运行 tutorial那部分效果很好。我对其进行了设置,使其最多运行 10 个 worker 。问题是当我第二天检查时,其中一些 worker 已经停止并且没有重新启动。服务器也没有重新启动。
这就是我的程序在 supervisord.conf
中的设置方式文件:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command= php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
directory=/home/magic/_app/_laravel
numprocs=10
redirect_stderr=true
autostart=true
autorestart=true
startsecs=0
startretries=10
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
stdout_logfile=/home/magic/_app/_laravel/storage/logs/supervisor/supervisor.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stdout_capture_maxbytes=0
stdout_events_enabled=false
user=magic
environment=PATH="/usr/local/bin"
我第一次使用
service supervisord start
启动服务,然后如果我这样做 service supervisord status
,它显示了下面的过程。我不完全理解它们,但看起来是正确的,因为我的工匠命令有 10 个实例。|-17991 /usr/bin/python /usr//bin/supervisord --pidfile /tmp/supervisord.pid
|-17992 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17993 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17994 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17995 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17996 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17997 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17998 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17999 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-18000 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-18001 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-18002 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18003 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18004 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18005 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18006 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18007 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18008 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18009 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-18010 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
`-18011 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
但是过了一段时间,通常是第二天,我就会看到这样的事情。而这次看起来只有 6 个进程在运行,因此其中 4 个已停止。
|- 3984 /usr/bin/python /usr//bin/supervisord --pidfile /tmp/supervisord.pid
|- 3985 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|- 3986 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|- 3988 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|- 3989 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-12224 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-13610 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-14263 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-16417 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17424 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-17425 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-17427 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-17428 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-17429 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-17430 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-17856 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
`-18356 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
supervisord 日志显示非常正常的东西。那里有几个 500 错误,我认为这可能是调查的线索,但它们与失踪 worker 的数量和时间戳都不匹配。
Laravel 日志本身有一些最大执行时间超出错误,实际上它有 10 个与我上次清除日志时相比。所以我不知道每个 worker 是否为 1。它看起来像这样。同样,时间戳与主管日志并不真正匹配,因此很难知道这是否可能导致它。我可以增加 PHP 允许的执行时间,我只是不知道这是否会导致工作人员无法重新启动。
[2016-04-14 02:56:20] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Maximum execution time of 30 seconds exceeded' in /home/magic/_app/_laravel/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php:130
如果有人有任何建议或建议,我将不胜感激。真的很想解决这个问题。
所以修复后
supervisorctl
正常工作,现在当我做 supervisorctl status
,它显示所有 10 个 worker 都在运行。但问题是他们没有运行他们应该运行的命令。这是什么
supervisorctl status
现在显示:laravel-worker:laravel-worker_00 RUNNING pid 11566, uptime 4:38:36
laravel-worker:laravel-worker_01 RUNNING pid 18358, uptime 2 days, 18:40:16
laravel-worker:laravel-worker_02 RUNNING pid 8102, uptime 1 day, 20:57:15
laravel-worker:laravel-worker_03 RUNNING pid 10691, uptime 11:42:54
laravel-worker:laravel-worker_04 RUNNING pid 32543, uptime 1 day, 22:07:53
laravel-worker:laravel-worker_05 RUNNING pid 30215, uptime 20:40:02
laravel-worker:laravel-worker_06 RUNNING pid 32732, uptime 1 day, 22:03:05
laravel-worker:laravel-worker_07 RUNNING pid 24625, uptime 21:44:41
laravel-worker:laravel-worker_08 RUNNING pid 19807, uptime 2:36:21
laravel-worker:laravel-worker_09 RUNNING pid 32332, uptime 1 day, 3:07:34
这就是
service supervisord status
显示。如您所见,它显示了 10 个 worker 和这些 worker 正在执行的 3 个任务。但是匹配10个 worker 应该是10个任务。因此,即使加类 worker 仍在运行,他们似乎出于某种原因停止执行任务:* supervisord.service - SYSV: Supervisor Server
Loaded: loaded (/etc/rc.d/init.d/supervisord)
Active: active (running) since Thu 2016-04-21 16:44:43 EDT; 2 days ago
Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/supervisord.service
|- 8102 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-10691 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-11566 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-18356 /usr/bin/python /usr//bin/supervisord --pidfile /tmp/supervisord.pid
|-18358 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-19807 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-24625 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-28557 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-28711 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-28712 /usr/local/bin/php artisan queue:work --queue=high,default --delay=0 --memory=128 --sleep=5 --tries=5 --env=production
|-30215 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-32332 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-32543 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
`-32732 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
Apr 21 16:44:43 host systemd[1]: Starting SYSV: Supervisor Server...
Apr 21 16:44:43 host supervisord[18351]: Starting supervisord: /usr/lib/python2.7/site-packages/supervisor-3.2.3-py2.7.egg/supervisor/option...
Apr 21 16:44:43 host supervisord[18351]: 'Supervisord is running as root and it is searching '
Apr 21 16:44:43 host supervisord[18351]: [17B blob data]
Apr 21 16:44:43 host systemd[1]: Started SYSV: Supervisor Server.
最佳答案
我想我可能已经解决了这个问题。可能是在 command
中使用了不正确的 php 导致的supervisord.conf
中的属性文件。我是从 php
改过来的至 /usr/local/bin/php
它现在已经运行了 2 天,并且没有任何任务必须重新启动或停止处理队列。
如果我看到问题重复出现,我会稍后更新这个问题,但现在它似乎比以往任何时候都运行稳定得多。
关于laravel - 主管 worker 停止加类,不重启(与laravel一起使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36625977/