在生产环境中想对webman程序进程开启自启、挂了自动重启,所以使用supervisord进行管理,但是在supervisodr配置中,使用php webman.phar start -d
后台启动时,supervisor报错,似乎不支持,改成php webman.phar start
,则正常守护webman.phar进程。
如果在生产环境中对webman.phar使用debug模式,是否会有安全隐患?
supervisor配置:
[program:webman-program]
process_name=webman-program
directory=/data/programs
command= /usr/local/bin/php8 webman.phar start # 正常
# command= /usr/local/bin/php8 webman.phar start -d # 报错
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/webman-program.log
supervisor中command配置debug运行时,正确启动,启动日志信息:
Workerman[webman.phar] start in DEBUG mode
------------------------------------------- WORKERMAN -------------------------------------------
Workerman version:4.1.9 PHP version:8.0.28 Event-Loop:\Workerman\Events\Event
-------------------------------------------- WORKERS --------------------------------------------
proto user worker listen processes status
tcp www-data webman-program http://0.0.0.0:8887 10 [OK]
tcp www-data monitor none 1 [OK]
tcp www-data rpc text://0.0.0.0:8888 20 [OK]
tcp www-data nlp-sync-task text://127.0.0.1:8889 10 [OK]
-------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
supervisor中command配置DAEMON运行时,错误启动,启动日志信息:
Workerman[webman.phar] start in DAEMON mode
如果使用外部程序做守护进程需要使用debug模式启动。
debug方式与daemon方式的区别在于是否开启守护进程及文件更新自动reload。
正式环境需要在代码完全更新后再执行reload。
把 config/process.php 里 monitor.options.enable_file_monitor 设置为false,不监控文件更新自动reload。避免发版本文件更新一半时自动reload文件加载不全导致报错。
其它没有没有什么问题。
我怎么没找到这个文件跟参数:monitor.options.enable_file_monitor,我用集群的方式分别部署register,gateway,worker,然后想用supervisor来控制进程,不知道会不会出现未知问题,用php start.php start/stop/restart经常会出现进程没退出
可能你的webman骨架版本比较老。如果用了supervisor来守护进程,php start.php stop 后supervisor可能会重新拉起,导致进程还在
我用的是gatewayWorker,未使用supervisor的情况也会出现stop后进程存在
也可能是业务用了 pnctl_fork popen exec 之类的函数,创建了新进程没关闭导致的