• th5.1 队列使用守护进程


    起因

    公司项目使用到了redis队列, 使用队列就会遇到队列被干掉的情况, 所以需要使用守护进程

    过程

    当项目上线之后, 需要在子项目根目录启动队列

    php think queue:listen

    但是这种写法, 一旦窗口关闭, 队列就会取消, 所以我就想了一个取消救国的方法, 让它在后台运行

    nohup php think queue:listen 2 > &1 &

    使用nohup 可以是该命令在后台运行,并把所有输出都被重定向到一个名为nohup.out的文件中

    但是这样做还是避免不了 这个进程意外关闭或者因为其他原因死掉

    所以最好还是选择使用守护进程

    第一步:在centos上安装守护进程supersivor

    # yum install epel-release
    # yum install supervisor -y
    //设置成开机自动启动
    # systemctl enable supervisord

    第二步:设置守护进程的运行目录,日志目录,配置文件

    守护进程有自己默认的运行目录,日志目录, 但是为了管理方便, 我们可以自己设置这些目录

    cd /var/
    mkdir supervisor
    cd supervisor/ 
    mkdir run  # 运行目录
    mkdir log  # 日志目录
    mkdir conf # 配置目录 也是需要执行的命令的配置目录

    第三步:修改配置文件

    配置文件在 /etc/supervisord.conf

    ; 将supervisor.sock 的路径换成如下
    [unix_http_server]
    file=/var/supervisor/run/supervisor.sock   ; (the path to the socket file)
    
    ; 将supervisord.log 和 supervisord.pid 的路径换成如下 
    [supervisord]
    logfile=/var/supervisor/log/supervisord.log  ; (main log file;default $CWD/supervisord.log)
    pidfile=/var/supervisor/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    
    ; 将supervisor.sock 的路径换成如下
    [supervisorctl]
    serverurl=unix:///var/supervisor/run/supervisor.sock ; use a unix:// URL  for a unix socket
    
    ; 将最底部的files路径换成如下  配置文件的目录
    [include]
    files = /var/supervisor/conf/*.conf

    第四步:配置自己需要运行的命令 在自己创建的配置目录下 /var/supervisor/conf

    这一步需要特别注意

    一般网上的提供的配置文件如下

    但是这样写会报一些错误, 例如目录找不到啊 不是一个有效的布尔值啊 之类的 

    cd /var/supervisor/conf
    vim work_queue.conf
    
    # 插入代码
    [program:queue_worker] ;项目名称
    directory = /var/tp5.1 ; 程序的启动目录,项目根目录的上一级
    command = php think queue:listen ; 启动命令 
    process_name=%(program_name)s_%(process_num)02d
    numprocs = 3         ; 开启的进程数量
    autostart = true     ; 在 supervisord 启动的时候也自动启动
    startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
    autorestart = true   ; 程序异常退出后自动重启
    startretries = 3     ; 启动失败自动重试次数,默认是 3
    user = root          ; 用哪个用户启动
    redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
    stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB
    stdout_logfile_backups = 20     ; stdout 日志文件备份数
    ; stdout 日志文件,需要手动创建目录(supervisord 会自动创建日志文件)
    stdout_logfile = /var/supervisor/log/queue_worker.log
    loglevel=info

    经过亲自验证,在启动守护进程时需要将上面的配置的注释以及 ‘;’ 去掉

    # 插入代码
    [program:queue_worker]
    directory=/var/tp5.1
    command=php think queue:listen
    process_name=%(program_name)s_%(process_num)02d
    numprocs=3
    autostart=true
    startsecs=5
    autorestart=true
    startretries=3
    user=root
    redirect_stderr=true
    stdout_logfile_maxbytes=50MB 
    stdout_logfile_backups=20
    stdout_logfile=/var/supervisor/log/queue_worker.log
    loglevel=info

    第五步:启动守护进程

    systemctl start supervisord
    
    systemctl stop supervisord
    systemctl restart supervisord

    第六步:测试

    可以打开日志文件 /va/supervisor/log/  查看日志  是否报错

    也可以使用 ps 查看命令是否运行  ps -aux|grep php

    第七步:提示

    如果你有多个项目怎么半,特别是在测试环境, 一般都时多个项目在测试服务器

    这个时候只需要在 /var/supervisor/conf/ 下增加一个配置文件即可  

    文件内容需要修改 项目目录  日志文件名称 等

    结束

    很多东西只看是看不会的,需要亲自操作一遍,才发现有些事情是我们想的复杂了, 更多的是 事情并不像我们想象的那么简单

  • 相关阅读:
    [Protractor] Test Simple Binding With Protractor
    [Angular 2] A Simple Form in Angular 2
    [ES6] Converting an array-like object into an Array with Array.from()
    [Falcor] Intro to JSON Graph
    [Angular + Webpack] ocLazyLoad compoment
    [Falcor] Retrieving Multiple Values
    [MongoDB] Introduce to MongoDB
    [Protractor] Getting Started With Protractor
    [AngularJS] Use ng-model-options to limit $digest
    ylbtech-协议-网络-安全协议:HTTPS
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/12690420.html
Copyright © 2020-2023  润新知