我正在配置主管守护进程以便能够启动/停止 Celery。
它不起作用。经过反复调试后,我意识到问题在于它没有将工作目录更改为程序部分下 Supervisord.conf 中的目录选项中提到的目录。
希望 Celery 中有一个workdir
,但我很好奇——那么这个选项的用途是什么directory
?
如果你通过主管运行脚本并打印,pwd
它将输出/。
答案1
directory
我遇到了同样的问题,并通过颠倒和选项的顺序解决了它command
:
例如工作:
[program:cat]
directory=/var/log
command=cat logfile
不起作用:
[program:cat]
command=cat logfile
directory=/var/log
答案2
下面是一个例子,我如何让具有正确 ENV 的 nodejs 应用程序与主管一起工作
[program:fake-smtp]
directory=/home/web/fake-smtp
command=sh -c 'NODE_ENV=production node src/index.js'
autostart=true
autorestart=true
user=web
redirect_stderr=true
stdout_logfile=/home/web/logs/smtp.log
stderr_logfile=/home/web/logs/smtp.err.log
希望这有帮助!此应用程序还需要正确的目录。
答案3
这与 Laravel(PHP 框架)相同,我使用 Supervisor 来运行队列中的作业,但找不到 .env 文件,这是一个有效的配置:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/YOUR_LARAVEL_APP
command=php artisan queue:work database --sleep=3 --tries=3
autostart=true
autorestart=true
user=YOUR_USER
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/YOUR_LARAVEL_APP/storage/logs/worker.log
stderr_logfile=/var/www/YOUR_LARAVEL_APP/storage/logs/worker_error.log