生产环境,执行webman程序使用debug模式,是否会有隐患

xiaopi

问题描述

在生产环境中想对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
904 1 6
1个回答

walkor

如果使用外部程序做守护进程需要使用debug模式启动。
debug方式与daemon方式的区别在于是否开启守护进程及文件更新自动reload。

正式环境需要在代码完全更新后再执行reload。
把 config/process.php 里 monitor.options.enable_file_monitor 设置为false,不监控文件更新自动reload。避免发版本文件更新一半时自动reload文件加载不全导致报错。

其它没有没有什么问题。

  • gyfb29 2023-08-01

    我怎么没找到这个文件跟参数:monitor.options.enable_file_monitor,我用集群的方式分别部署register,gateway,worker,然后想用supervisor来控制进程,不知道会不会出现未知问题,用php start.php start/stop/restart经常会出现进程没退出

  • walkor 2023-08-01

    可能你的webman骨架版本比较老。如果用了supervisor来守护进程,php start.php stop 后supervisor可能会重新拉起,导致进程还在

  • gyfb29 2023-08-01

    我用的是gatewayWorker,未使用supervisor的情况也会出现stop后进程存在

  • walkor 2023-08-01

    也可能是业务用了 pnctl_fork popen exec 之类的函数,创建了新进程没关闭导致的

🔝