启动配置文件
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/php/bin/php /workspace/dev0/ctjy_socket_server/start.php start -d
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/workspace/dev0/ctjy_socket_server/storage/logs/worker.log
然后启动时 $ supervisorctl start all
报 ctjypt-socket-server_00: ERROR (abnormal termination)
查看日志发现
Fatal error: Uncaught Exception: can not save pid to /var/run/workerman.pid in /workspace/dev0/ctjy_socket_server/vendor/workerman/workerman/Worker.php:1031
Stack trace:
#0 /workspace/dev0/ctjy_socket_server/vendor/workerman/workerman/Worker.php(457): Workerman\Worker::saveMasterPid()
#1 /workspace/dev0/ctjy_socket_server/start.php(41): Workerman\Worker::runAll()
#2 {main}
thrown in /workspace/dev0/ctjy_socket_server/vendor/workerman/workerman/Worker.php on line 1031
``
试图修改 $ chmod -R 777 /var/run/ 也不行
然后配置 启动文件
```php
require_once __DIR__ . '/vendor/autoload.php';
Worker::$pidFile = __DIR__ . '/storage/workerman.pid';
还是报上面一样的错误
Fatal error: Uncaught Exception: can not save pid to /var/run/workerman.pid
但是 php start.php status 又显示启动了
如果 直接在控制台输入 php start.php start -d 则没有任务问题
请问使用supervisor 守护怎么操作
很明显啊,supervisor 没权限在 /var/run/目录添加文件或者修改文件 /var/run/workerman.pid
这个又怎么解释呢 Worker::$pidFile = __DIR__ . '/storage/workerman.pid';
所有文件代码里找关键字 /var/run/ 呗,应该是哪里还设置了Worker::$pidFile
现在发现 如果是在控制台运行
发现 /workspace/dev0/ctjy_socket_server/storage/workerman.pid 配置已经生效了
不知道为什么 supervisor 会不按配置里的走 会把它住 /var/run 里保存
cat /var/log/supervisor/supervisord.log
2018-04-04 14:20:18,796 INFO spawned: 'ctjypt-socket-server_00' with pid 14772
2018-04-04 14:20:18,835 INFO exited: ctjypt-socket-server_00 (exit status 0; not expected)
2018-04-04 14:20:19,836 INFO gave up: ctjypt-socket-server_00 entered FATAL state, too many start retries too quickly
supervisord 不能管理后台运行程序,启动 workerman 的时候需要设置为:Worker::$daemonize = false