Мы используем конвейеры bitbucket для установки привилегий, установки композитора и, что важно, на после развертывания мы делаем следующее:
php artisan migrate
nohup php artisan queue:work --daemon >/dev/null 2>&1 &
php artisan up
Отлично, поэтому, когда конвейер запускается, мы создаем новый фоновый процесс для queue:work
.
Моя проблема возникает, когда сначала запускается pre-deploy hook. Перед всем этим мы запускаем:
php /var/www/html/artisan queue:restart
php /var/www/html/artisan down
Я ожидаю, что очередь будет остановлена: рабочие будут остановлены, так как это доказано при локальном запуске или даже при непосредственном выполнении queue:restart
на сервере. Однако каждый раз, когда конвейеры запускаются, кажется, что queue: restart ничего не делает, и мы создаем другой работающий процесс. Сейчас у нас 15 запущенных процессов очереди заданий laravel, потому что конвейер не убивает старые.
Вот фрагмент из скриптов в файле конвейера:
script:
- apt-get update && apt-get install -y git rsync unzip libmcrypt-dev
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
- composer install
- ssh $DEPLOY_USER@$STAGING_EC2_INSTANCE "[ -f /var/www/html/pre-deploy-hook ] && /var/www/html/pre-deploy-hook" || echo "No pre deploy hook found."
- rsync -v -a -z --delete --exclude "storage/" --exclude ".git" . $DEPLOY_USER@$STAGING_EC2_INSTANCE:/var/www/html
- ssh $DEPLOY_USER@$STAGING_EC2_INSTANCE "/var/www/html/post-deploy-hook-staging"
Кто-нибудь знает, как остановить работников очереди заданий Laravel? queue:restart
должен непременно работать. У кого-нибудь, кто реализовал это в конвейере, есть ответ?
Спасибо!