92

最近、Laravel Queue システムをセットアップしました。基本は、cronjob がジョブをキューに追加するコマンドを呼び出し、電子メールを送信する 2 番目のコマンドを呼び出すことです。

サーバーに ssh して php artisan queue:listen を実行するとシステムは機能しますが、端末を閉じるとリスナーがシャットダウンし、ssh に戻って再度 listen を実行するまでジョブがスタックしてキューに置かれます。

ssh 経由で接続を開いたままにしなくても、キュー システムをバックグラウンドで実行し続ける最良の方法は何ですか?

を実行してみphp artisan queue:work --daemonましたが、キュー内のジョブは完了しましたが、端末を閉じると、接続とバックグラウンド プロセスが閉じられました。

4

19 に答える 19

20

コマンド

nohup php artisan queue:work --daemon &

正解でした。SSH 接続を閉じた後もプロセスを続行できます。ただし、これは短期的な修正にすぎません。サーバーが再起動されるか、問題が発生してプロセスが停止したら、戻ってコマンドを再度実行する必要があります。それがいつ起こるか、あなたは決して知りません。金曜日の夜に発生する可能性があるため、長期的な解決策を実装することをお勧めします.

私はSupervisordに切り替えることになりました。これはUbuntuに簡単にインストールできます

sudo apt-get install supervisor 

AWS-AMI または RedHat ユーザーの場合は、この質問で概説した一連の手順に従うことができます。

AWS AMI Linux サーバーでの Supervisord のセットアップ

于 2016-12-15T18:22:43.537 に答える
16

1)sudo apt install supervisor または

sudo apt-get install supervisor

2) cd /etc/supervisor/conf.d 3) 内部に新しいファイルを作成する

sudo vim queue-worker.conf

ファイルの内容

[program:email-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravelproject/artisan queue:work
autostart=true
autorestart=true
user=root
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/html/laravelproject/storage/logs/supervisord.log

4)sudo supervisorctl reread

このコマンドを実行すると、出力 queue-worker:available を取得します

5)sudo supervisorctl update

このコマンドを実行すると、出力 queue-worker:added プロセス グループが取得されます

その他のコマンド

1)sudo supervisorctl reload

このコマンドを実行すると出力が得られます

2)sudo service supervisor restart

于 2019-08-05T06:17:10.847 に答える
7

すでに本番環境でNodeJSを実行している方向け。PM2 を使用してアプリのプロセスを管理しています。

# install
npm install -g pm2

# in project dir with your CI or dev setup tool 
# --name gives task a name so that you can later manage it
# -- delimits arguments that get passed to the script
pm2 start artisan --interpreter php --name queue-worker -- queue:work --daemon

私は NodeJS の開発とセットアップに Vagrant を使用しており、このプロセスではインライン vagrant スクリプトのみを使用しています。

開発で PM2 を使用する場合、多くのウォッチャーの 1 つを使用して再起動を管理できます。pm2 restart queue-worker変更を取得するときに実行するだけです。本番環境では、このアプローチはお勧めしません。むしろ、このプロセスに従うことができるビルド ツールを選びます。

# 1. stop pm task to ensure that no unexpected behaviour occurs during build
pm2 stop queue-worker
# 2. do your build tasks
...
# 3. restart queue so that it loads the new code
pm2 restart queue-worker
于 2018-01-09T02:43:12.447 に答える
1

CentOS7 の場合

yum install supervisor

次に、コンテンツを含む /etc/supervisord.d/filename.ini にファイルを作成します

[program:laravel-worker]
command=/usr/bin/php /home/appuser/public_html/artisan queue:listen
process_name=%(program_name)s_%(process_num)02d
numprocs=5
priority=999
autostart=true
autorestart=true
startsecs=1
startretries=3
user=appuser
redirect_stderr=true
stdout_logfile=/path/logpath/artisan.log

次に、次を使用して Supervisord サービスを開始します

systemctl restart supervisord

以下を使用して、起動時に Supervisord サービスを実行できるようにします。

systemctl enable supervisord

を使用してサービスが実行されているかどうかを確認します

ps aux | grep artisan

プロセスが正しく設定されていれば、プロセスが実行されているはずです。以下の出力に似ています。

[root@server ~]# ps aux | grep artisan
appuser 17444  0.1  0.8 378656 31068 ?        S    12:43   0:05 /usr/bin/php /home/appuser/public_html/artisan queue:listen
于 2019-11-20T08:16:13.973 に答える