在 Linux 系统中,可以使用 systemd 或 supervisord 等工具来管理 Celery 进程
systemd 设置资源限制:首先,创建一个名为 celery.service 的 Systemd 服务文件。将以下内容添加到 /etc/systemd/system/celery.service:
[Unit]Description=Celery ServiceAfter=network.target[Service]Type=forkingUser=your_userGroup=your_groupWorkingDirectory=/path/to/your/projectExecStart=/path/to/your/virtualenv/bin/celery multi start worker -A your_project.celery --pidfile=/var/run/celery/%n.pid --logfile=/var/log/celery/%n%I.log --loglevel=INFOExecStop=/path/to/your/virtualenv/bin/celery multi stopwait worker --pidfile=/var/run/celery/%n.pidExecReload=/path/to/your/virtualenv/bin/celery multi restart worker -A your_project.celery --pidfile=/var/run/celery/%n.pid --logfile=/var/log/celery/%n%I.log --loglevel=INFOLimitNOFILE=10240LimitNPROC=1024LimitMEMLOCK=infinityLimitSTACK=infinityLimitCORE=infinityLimitRSS=infinityLimitAS=infinityLimitCPU=infinity[Install]WantedBy=multi-user.target这里的 Limit* 参数定义了 Celery 进程的资源限制。根据需要调整这些值。
然后,重新加载 Systemd 配置并启动 Celery 服务:
sudo systemctl daemon-reloadsudo systemctl enable celerysudo systemctl start celery使用 supervisord 设置资源限制:首先,安装 Supervisor:
sudo apt-get install supervisor接下来,创建一个名为 celery.conf 的 Supervisor 配置文件。将以下内容添加到 /etc/supervisor/conf.d/celery.conf:
[program:celery]command=/path/to/your/virtualenv/bin/celery -A your_project.celery worker --loglevel=INFOdirectory=/path/to/your/projectuser=your_usernumprocs=1stdout_logfile=/var/log/celery/worker.logstderr_logfile=/var/log/celery/worker.error.logautostart=trueautorestart=truestartsecs=10stopwaitsecs=600stopasgroup=truepriority=998[program:celerybeat]command=/path/to/your/virtualenv/bin/celery -A your_project.celery beat --loglevel=INFOdirectory=/path/to/your/projectuser=your_usernumprocs=1stdout_logfile=/var/log/celery/beat.logstderr_logfile=/var/log/celery/beat.error.logautostart=trueautorestart=truestartsecs=10stopwaitsecs=600stopasgroup=truepriority=999接下来,更新 Supervisor 配置并启动 Celery 进程:
sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start celery注意:Supervisor 不支持直接设置资源限制。但是,你可以通过在命令行中使用 ulimit 命令来设置资源限制。例如,要设置最大打开文件数限制为 10240,可以在 command 参数中添加 ulimit -n 10240 &&:
command=ulimit -n 10240 && /path/to/your/virtualenv/bin/celery -A your_project.celery worker --loglevel=INFO请根据需要调整资源限制。