Uncaught Exception: 地址已在使用

Q535977672

问题描述

程序启动后,短时间内执行 php start.php stop,重新运行 php start.php start -d没问题。
执行一段时间后(几天,或者十来天都可能),进行代码更新后,再执行 php start.php stop显示
[root@localhost ECM-PHP]# php start.php stop
Workerman[start.php] stop
Workerman[start.php] not run
再执行php start.php start -d,显示地址已在使用,之前的程序没有停止。
只能执行ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9 后才能重新启动。

程序代码或配置

[root@localhost ECM-PHP]# php start.php stop
Workerman[start.php] stop 
Workerman[start.php] not run
[root@localhost ECM-PHP]# php start.php start -d
Workerman[start.php] start in DAEMON mode
stream_socket_server(): unable to connect to tcp://0.0.0.0:38787 (地址已在使用) in file /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2363
PHP Fatal error:  Uncaught Exception: 地址已在使用 in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php:2365
Stack trace:
#0 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(700): Workerman\Worker->listen()
#1 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(555): Workerman\Worker::initWorkers()
#2 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#3 /mnt/data/ecm/php/ECM-PHP/start.php(4): support\App::run()
#4 {main}
  thrown in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2365

Fatal error: Uncaught Exception: 地址已在使用 in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php:2365
Stack trace:
#0 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(700): Workerman\Worker->listen()
#1 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(555): Workerman\Worker::initWorkers()
#2 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#3 /mnt/data/ecm/php/ECM-PHP/start.php(4): support\App::run()
#4 {main}
  thrown in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2365
[root@localhost ECM-PHP]# php start.php start -d
Workerman[start.php] start in DAEMON mode
stream_socket_server(): unable to connect to tcp://0.0.0.0:38787 (地址已在使用) in file /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2363
PHP Fatal error:  Uncaught Exception: 地址已在使用 in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php:2365
Stack trace:
#0 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(700): Workerman\Worker->listen()
#1 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(555): Workerman\Worker::initWorkers()
#2 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#3 /mnt/data/ecm/php/ECM-PHP/start.php(4): support\App::run()
#4 {main}
  thrown in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2365

Fatal error: Uncaught Exception: 地址已在使用 in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php:2365
Stack trace:
#0 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(700): Workerman\Worker->listen()
#1 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(555): Workerman\Worker::initWorkers()
#2 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#3 /mnt/data/ecm/php/ECM-PHP/start.php(4): support\App::run()
#4 {main}
  thrown in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2365
[root@localhost ECM-PHP]# php start.php stop
Workerman[start.php] stop 
Workerman[start.php] not run
[root@localhost ECM-PHP]# php start.php start -d
Workerman[start.php] start in DAEMON mode
stream_socket_server(): unable to connect to tcp://0.0.0.0:38787 (地址已在使用) in file /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2363
PHP Fatal error:  Uncaught Exception: 地址已在使用 in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php:2365
Stack trace:
#0 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(700): Workerman\Worker->listen()
#1 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(555): Workerman\Worker::initWorkers()
#2 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#3 /mnt/data/ecm/php/ECM-PHP/start.php(4): support\App::run()
#4 {main}
  thrown in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2365

Fatal error: Uncaught Exception: 地址已在使用 in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php:2365
Stack trace:
#0 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(700): Workerman\Worker->listen()
#1 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php(555): Workerman\Worker::initWorkers()
#2 /mnt/data/ecm/php/ECM-PHP/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#3 /mnt/data/ecm/php/ECM-PHP/start.php(4): support\App::run()
#4 {main}
  thrown in /mnt/data/ecm/php/ECM-PHP/vendor/workerman/workerman/Worker.php on line 2365
[root@localhost ECM-PHP]# ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
kill: 向 12222 发送信号失败: 没有那个进程
[root@localhost ECM-PHP]# php start.php start -d
Workerman[start.php] start in DAEMON mode
-------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.1.15          PHP version:7.4.33           Event-Loop:\Workerman\Events\Select
--------------------------------------------- WORKERS ---------------------------------------------
proto   user            worker          listen                  processes    status           
tcp     root            webman          http://0.0.0.0:38787    80            [OK]            
tcp     root            monitor         none                    1             [OK]            
tcp     root            synctask        http://0.0.0.0:38788    8             [OK]            
tcp     root            synctaskcomm    none                    1             [OK]            
---------------------------------------------------------------------------------------------------
Input "php start.php stop" to stop. Start success.
133 1 0
1个回答

walkor 打赏

进程启动后会把进程pid存在runtime下,这个pid文件不要放代码库里。
否则每次更新代码后pid文件是过时的,导致无法停止进程,启动并时端口会提示占用。

  • Q535977672 2026-03-16

    没有被覆盖,.gitignore文件都忽略了runtime内的所有文件的

  • walkor 2026-03-17

    自己更新代码前和更新后对比下看下线上pid文件内容和主进程pid是否相同。
    执行ps auxf 能看到webman主进程pid

🔝