注意核心配置参数
虚拟环境是建议用 但不是必须-主要还是看当前有没有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
最后编辑:admin 更新时间:2025-10-20 17:42