注意核心配置参数
    虚拟环境是建议用 但不是必须-主要还是看当前有没有source进虚拟环境的问题吧
    如果没有虚拟环境的 就把VENV_PATH的相关都去除掉

    #!/bin/bash
    
    # 定义变量
    BASE_DIR="项目目录"
    WORKER_NAME="celery_worker -自定义"
    BEAT_NAME="celery_beat -自定义"
    
    # 核心配置参数
    CELERY_MODULE="celery模块名"  # celery模块名
    ENABLE_BEAT=false  # 是否开启定时任务
    QUEUES="celery"  # 默认监听的队列叫celery,多个队列用逗号隔开
    CELERY_CONCURRENCY=4  # celery 并发数
    VENV_PATH=""  # 虚拟环境路径 示例:/home/ubuntu/project/py312
    
    # 检查日志目录是否存在,如果不存在则创建
    LOG_DIR="$BASE_DIR/logs"
    if [ ! -d "$LOG_DIR" ]; then
        mkdir -p "$LOG_DIR"
    fi
    
    # 构建 worker 命令
    WORKER_COMMAND="$VENV_PATH/bin/celery -A $CELERY_MODULE worker --loglevel=info --concurrency=$CELERY_CONCURRENCY -Q $QUEUES"
    
    # 创建 supervisord.conf 文件
    cat << EOF > supervisord.conf
    [supervisord]
    nodaemon=false
    logfile=$BASE_DIR/supervisord.log
    logfile_maxbytes=50MB
    logfile_backups=10
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    [supervisorctl]
    serverurl=unix://$BASE_DIR/supervisor.sock
    
    [unix_http_server]
    file=$BASE_DIR/supervisor.sock
    
    [program:$WORKER_NAME]
    command=$WORKER_COMMAND
    directory=$BASE_DIR
    environment=PYTHONPATH="$BASE_DIR",PATH="$VENV_PATH/bin:/usr/local/bin:/usr/bin:/bin"
    autostart=true
    autorestart=true
    stdout_logfile=$LOG_DIR/${WORKER_NAME}_out.log
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=1
    stderr_logfile=$LOG_DIR/${WORKER_NAME}_err.log
    stderr_logfile_maxbytes=10MB
    stderr_logfile_backups=1
    stopwaitsecs=600
    killasgroup=true
    priority=998
    EOF
    
    # 如果启用定时任务,追加 beat 配置
    if [ "$ENABLE_BEAT" = true ]; then
        cat << EOF >> supervisord.conf
    
    [program:$BEAT_NAME]
    command=$VENV_PATH/bin/celery -A $CELERY_MODULE beat --loglevel=info
    directory=$BASE_DIR
    environment=PYTHONPATH="$BASE_DIR",PATH="$VENV_PATH/bin:/usr/local/bin:/usr/bin:/bin"
    autostart=true
    autorestart=true
    stdout_logfile=$LOG_DIR/${BEAT_NAME}_out.log
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=1
    stderr_logfile=$LOG_DIR/${BEAT_NAME}_err.log
    stderr_logfile_maxbytes=10MB
    stderr_logfile_backups=1
    stopwaitsecs=30
    killasgroup=true
    priority=999
    EOF
    fi
    
    echo "supervisord.conf 已生成"
    echo "虚拟环境: $VENV_PATH"
    echo "Celery模块: $CELERY_MODULE"
    echo "监听队列: $QUEUES"
    echo "并发数: $CELERY_CONCURRENCY"
    if [ "$ENABLE_BEAT" = true ]; then
        echo "定时任务: 已启用"
    else
        echo "定时任务: 已禁用"
    fi
    作者:admin  创建时间:2025-10-20 17:40
    最后编辑:admin  更新时间:2025-10-20 17:42