Я настраивал демон супервизора, чтобы иметь возможность запускать / останавливать Celery.
Это не работает. После отладки я понял, что проблема в том, что рабочий каталог не изменился на тот, который указан в параметре каталога в supervisord.conf в разделе программы.
Надеюсь, есть workdir
в сельдерее, но мне любопытно - какова цель directory
вариант тогда?
Если вы запустите сценарий через супервизор и распечатаете pwd
он будет выводить /.
У меня была такая же проблема, и мне удалось решить ее, изменив порядок directory
и command
параметры:
например работает:
[program:cat]
directory=/var/log
command=cat logfile
Не работает:
[program:cat]
command=cat logfile
directory=/var/log
вот пример, как я получил приложение nodejs с правильным ENV, работающим с супервизором
[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
надеюсь, это поможет! это приложение также требует правильного каталога.
То же самое и с Laravel (PHP Framework), я использую супервизор для запуска заданий в очереди, а файл .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