三、启动相关注意:
1. 启动:
①. 启动swoft:
php bin/swoft http:start
②. 查看进程:
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 7 20:18 ? 00:00:01 swoft-http master process(/var/www/swoft//var/www/swoft/bin/swoft)
root 14 1 0 20:18 ? 00:00:00 swoft-http manager process
root 16 14 0 20:18 ? 00:00:00 swoft-http task process
...
root 28 14 0 20:18 ? 00:00:00 swoft-http worker process
...
# 1个master、10个task、6个worker
# PPID表示父的PID
注:
①. 开发环境php bin/swoft http:start启动后,最好不要ctrl + c终止掉,防止出现僵尸进程.
可以再开一个窗口,使用php bin/swoft http:restart来重启.
②. 生产环境可以使用docker restart swoft来重启容器.
2. Swoft-cli使用、修改代码自动重启服务:
宿主机代码改动,重启容器可以解决,但是麻烦.
①. swoft 1.x修改代码会有reload重新加载机制,内置了一个不断死循环的监听文件md5值是否发生改变.如果改变,就会改变worker进程.
②. swoft 2.x把监控文件变动并重启服务的代码专门做成一个客户端工具Swoft-cli.
注:生产环境是不需要的,只有在开发中使用.
2.1 基本原理:
①. 死循环收集指定一堆文件的md5值(php的md5_file函数)
②. 一旦文件发生变化,md5值就会发生变化.
③. 如果变化,则发送信号给主进程ID,重启服务(整个服务,非worker进程)
④. 代码在ServerCommand的205行
2.2 安装swoftcli:
①. 进入docker容器中下载swoftcli包:
wget https://github.com/swoft-cloud/swoft-cli/releases/download/v0.1.3/swoftcli.phar
②. 拷贝到环境变量目录中全局使用:
mv swoftcli.phar /usr/local/bin/swoftcli
chmod +x /usr/local/bin/swoftcli // 给执行权限
③. 以swoftcli的方式启动并监听:
php /swoft/bin/swoft http:stop
swoftcli run -c http:start -b bin/swoft // http api
swoftcli run -c rpc:start -b bin/swoft // http rpc
④. 查看进程:
apk add procps // 安装后,Alpine镜像在ps -ef可以查看更多PID、PPID等信息
ps -ef
3. 重启报错提示正在运行:
现象:
如果程序非正常关闭,会提示Http Server have been running.
原因:
①. 程序启动后,会在runtime/swoft.pid文件中记录了主进程的PID.如果有这个文件,表示正在开启.
②. 因为多进程需要关闭或重启,需要获取主进程的PID.
解决方案:
删除这个文件:rm runtime/swoft.pid