通过git钩子部署项目

https://www.cnblogs.com/dudeyouth/p/6395551.html

将git用户添加到www用户组
usermod -a -G www git

···
// 已有项目部署
cd existing_folder
git init
git git remote add origin ssh://git@47.106.101.145/home/git/warehouse/game.git
git add .
git commit -m "Initial commit"
git push -u origin master
···

PHP多进程相关

参考文章

https://www.cnblogs.com/leezhxing/p/5223289.html

牛人博客

https://segmentfault.com/blog/tigerb?page=1

Manager::__construct

  • 加载环境配置变量 parse_ini_file
  • 读取配置 os / userPasswd / startNum / hangupLoopMicrotime / pipeDir
  • 初始化master对象(设置type,设置pid|posix_getpid,创建管道文件), daemon对象(设置type)
  • 进程间通信 匿名管道 命名管道(pcntl_fork|posix_mkfifo|fopen r+可以非阻塞打开管道文件|stream_set_blocking设置读写非阻塞|保证原子性)
  • 支持信号 reload|SIGUSR1/stop|SIGUSR2/terminate|SIGTERM/int|SIGINT
  • fork子进程(写时复制)
    -- 创建管道文件
    -- while(true)
    -- 执行业务逻辑闭包函数
    -- 根据标志位判断是否退出
    -- 非阻塞地 fopen(r+)|stream_set_blocking(0) 从管道中读取信号
    -- 父进程new4个work对象 $this->workers[$pid] type:master ?
  • 注册信号处理函数 pcntl_signal|pcntl_signal_dispatch 信号写入每个worker的管道
    -- reload 通过管道通知子进程设置退出位 (进程池)
    -- stop 通过管道通知子进程设置退出位 (进程池)
    -- int posix_kill子进程, 父进程退出
    -- terminate posix_kill子进程, 父进程退出
  • while(true)父进程
    -- pcntl_waitpid(WNOHANG) 非阻塞检测子进程退出
    -- pcntl_waitpid 有返回->是否收到信号->reload/stop->对应pid子进程从进程池移除再执行fork(如果是reload信号)