学習備忘ログ

よく使うコードや設定のメモ

Sqs及びSupervisorの設定

基本操作

  • 停止

`sudo supervisorctl stop 【worker名】

  • 再起動

    • sudo supervisorctl reread で .conf の再読み込み
    • sudo supervisorctl update で supervisor 自体に最新の conf 情報を反映させる
    • sudo supervisorctl start canly-localposts-worker:* で開始

全ての woker が RUNNING になればOK。

confファイルの設定

  • ファイルの作成箇所

/etc/supervisor/conf.d/

内に、各workerごとに .conf ファイルがあるので、その中身を確認する。

【canly-localposts-worker.conf の例】

[program:canly-localposts-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /usr/local/var/www/201906_MEO-Cloud/artisan queue:work --queue=queue_name --sleep=2 --timeout=7200
autostart=true
autorestart=true
user=ubuntu
numprocs=1
redirect_stderr=true
stdout_logfile=/usr/local/var/www/201906_MEO-Cloud/storage/logs/canly-localposts-worker.log

トラブル時のチェック項目

  • まずは状況を確認する

sudo supervisorctl status

以下のように RUNNING になっていれば正常稼働中。

ubuntu@ip-172-31-5-73:~$ sudo supervisorctl status
canly-localposts-worker:canly-localposts-worker_00               RUNNING   pid 8597, uptime 4:30:45
canly-standard-worker:canly-standard-worker_00                   RUNNING   pid 18768, uptime 17:54:56
insight-csv-exporting:insight-csv-exporting_00                   RUNNING   pid 18769, uptime 17:54:56
update_store_using_csv_worker:update_store_using_csv_worker_00   RUNNING   pid 18794, uptime 17:54:54

(それ以外のステータスがある場合は以下に続く。)

supervisor の ログで起動状況などを確認する

less /var/log/supervisor/supervisord.log

起動→エラーでworkerが終了→supervisorが強制的に再起動→エラー…

を繰り返しているような場合があるため、この場合はエラー原因を取り除くまではいったん該当の worker を停止させておく。

キューの設定

redisやsqsを使用できるが今回は、sqsでのキュー設定方法を記載する。

  1. awsのコンソールでsqsでキューを作成。

代替テキスト

  1. queue.phpでドライバーの設定
      'sqs_create_media' => [
            'driver' => 'sqs',
            'key' => env('AWS_KEY', ''),
            'secret' => env('AWS_SECRET', ''),
            'prefix' => 'https://sqs.ap-northeast-1.amazonaws.com/608782139973',
            'queue' => 'Bulk-Create-Media-Queue',
            'region' => 'ap-northeast-1',
        ],
  1. envのQueueDriverに上記を指定
QUEUE_DRIVER=sqs_create_media
  1. jobをdispatchする際に以下のどちらかでやる。

Job::dispatch->onConnection(env('QUEUE_DRIVER','sync'));
Job::dispatch->onQueue('Bulk-Create-Media-Queue');

onQueueの引数の中身もenvにして読みこむと良い。

上記二つの判断としては、既にQUEUE_DRIVER指定されており変更できない場合は、2つ目、変更できる場合は1つ目でやると良いかも。