Laravel:workerを自動起動させるSupervisor設置でハマったところ
- 2019.06.29
- Python備忘録
- ECシステム, Laravel, PHP, Python 2系, Python 3系, suprevisor, Worker, エラー改善, スーパーバイザー, スクリプト備忘録, 監視, 自作システム, 自動起動
Supervisor設定でハマったところ
もう2度と同じ間違いをうろつかないように、しっかりまとめたいと思います。
■supervisorインストールまで
- 『$ sudo yum install supervisor』でインストールするとバージョンが古い
- 『$ sudo apt-get install supervisor』はUbuntuのコマンド。CentOSでは使えない
- 『$ sudo easy_install supervisor』を使うには準備が必要(sudo yum install python-setuptoolsを先に実行しておく)
- supervisorはpython2系がデフォルトになっているとインストールに失敗する事がある。
- pythonのデフォルトを変更した場合、リンク先を変えないとyumが動かない
■supervisorインストール後(設定)
- supervisorの設定を紹介したページにはsupervisord.confに直接記載とiniを作り読み込ませている場合がある
- 起動スクリプトをRPMから抽出させる場合、『curl -LO』にてDownloadしたPRMが壊れることがある点に注意する
- Laravel Queueの設定を登録するときはマニュアルをそのまま記載せずに自分の環境に置き換える
こんだけ書くと特にインストールでハマってたことがよくわかりますね。
1つづつ確認していきます。
yum でインストールするとバージョンが古い
私の場合は確か2.4がインストールされました。
でも、この記事を記載している時点の最新はsupervisor 4.0.3 全然違うじゃん!
インストール後の設定のお手本となるサイト記事さんたちはバージョン3系が多いようなのでそっちをインストールしたい。
結論を先に書いてしまうと、その場合は下のコマンドが最適です。
1 |
sudo pip install supervisor |
apt-get はCentOSでは使えない
インストールについてネット上の記事を読み漁っていると apt-get コマンドでインストールしている方を見かけます。
Laravelマニュアルにも次のように記載されています。
うちはUbuntuじゃないんだよという方、他のインストール方法を考えましょう。
easy_install を使うには準備が必要
easy_install でsupervisorのインストールを行っている記事も多く目にします。
私も実行してみました。
1 |
sudo easy_install supervisor |
その結果『そんなコマンド知らねーよ』と怒られてしまいました。
この場合、先に下のコマンドを実行しておく必要があります。
1 |
sudo yum install python-setuptools |
これでeasy_installを使える環境が整います。
supervisorはpython2系がデフォルトになっているとインストールに失敗する事がある
私の場合はpython2.2がデフォルトになっていました。
そのため、インストールを始めてもエラーを吐き出してました。
どうやらsupervisor4.0.3ではpython2.7以上が必要な様子、pythonのバージョンを変更しなくてはなりません。
最近のpythonでは、インストールをすると2系と3系のバージョンが両方入る様です。
そのため、2系がデフォルトになっていても3系がインストールされている可能性があります。
3系の存在確認には次のコマンドを使います。
1 |
python3 -V |
これでバージョンが表示されれば3系のpythonがすでに入っていることになります。
シンボリックリンクを変更することでデフォルトのpythonを3系にする事は簡単にできますが、これが結構大きな落とし穴になる可能性があります。
pythonのデフォルト変更後yumが動かない
デフォルトPythonの変更をし、意気揚々と sudo yum install python-setuptools を走らせたら 「yumなんて知らねーよ!」と怒られました。
どうやらyumのリンク先をpython3系にしろとの事
1 |
sudo vim /usr/bin/yum |
でリンク先を変更すると使えるようになります。
ただし、多々問題もある様です。詳細は参考としたサイトさんの記事を確認しましょう。
pythonのデフォルトバージョンを3.7にしたい
Ubuntu16.04でPythonのバージョンを2.7から3.6にバージョンアップする
CentOS7 yum updateでエラーが出るとき
supervisord.confの設定は人それぞれ
いろいろなサイトを参考にさせて頂いていると「どれが正しいんだ?」と思うことがあります。
supervisord.confの設定もそうです。その理由はsupervisord.confに直接記載する説明とiniを作り読み込ませている説明があるからです。
iniで実行ファイルを外部に保存し読み込ませる場合、これらのファイルを保管するフォルダはインストール時に作成されません。
理由は自由だからです。
/usr/の中に作ってもいいし、/etc/の中に作ってもいいし、 /home/user/の中に作ってもいいわけです。
ちなみに/etc/supervisor/を作りここに記載をする例が多かったため、最初はこの設定じゃないといけないのかと思いましたが全く自由で自分で決められるようです。
※supervisord.confにちゃんと登録していればしっかり読み込んでくれます。
『curl -LO』にてDownloadしたPRMが壊れることがある
これも今回下記サイトを参考にしたところ経験したことです。
Supervisorのインストールで起動スクリプトを書きたくなかったのでRPMから抽出して利用した話
1 2 3 4 5 6 7 |
cd ~ mkdir supervisor_rpm cd supervisor_rpm curl -LO https://dl.fedoraproject.org/pub/epel/6/x86_64/supervisor-2.1-9.el6.noarch.rpm mkdir rpm_files cd rpm_files rpm2cpio ../supervisor-2.1-9.el6.noarch.rpm | cpio -id |
としたところ、rpmがわからないと言われてしまいました。
調べるとcurl で取得した場合、壊れているときがあるとの事。
supervisor-2.1-9.el6.noarch.rpm
supervisor-3.0-1.gf.el6.noarch.rpm
直接Downloadできるので入手してアップロードしましょう。
上記の場合は cd ~ なのでユーザーのホームディレクトリに上げれば参考サイトの続きをそのまま継続できます。
マニュアルをそのまま記載せずに自分の環境に置き換える
当たり前と言えば至極当たり前の話。
でも記載内容の意味が解らないと変更もできません。
Laravel Queueでは次の通り マニュアルより
1 2 3 4 5 6 7 8 9 |
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true user=forge numprocs=8 redirect_stderr=true stdout_logfile=/home/forge/app.com/worker.log |
▼変更後
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[program:laravel-worker] ;マニュアルそのまま process_name=%(program_name)s_%(process_num)02d autostart=true autorestart=true redirect_stderr=true numprocs=8 ;追加/変更するパーツ directory=/Laravelプロジェクトへの絶対パス/ command=php artisan queue:work sqs --sleep=3 --tries=3 user=root stdout_logfile=/任意のログファイル保存場所/利用ログファイル名.log |
commandについては、directoryを使わず下の様に1行にまとめても良い。
1 |
command=php /プログラム保管場所への絶対パス/artisan queue:work sqs --sleep=3 --tries=3 |
また、ログファイルの保存先『stdout_logfile』をLaravelプロジェクトのstrage/logs/supervisor.logとすれば、Laravelのログと同じ場所で管理でき利便性が高くなる。
まとめ
まぁこんな感じで右往左往しながらでしたが、supervisorの設置設定はマスタしました。
失敗が多いほど記憶には定着するというね。
歩みは遅くなるけどね。
作成中のシステムには非同期処理が必須なので、うまくいかない時は焦ってましたがしっかりと着地できてよかったです。
この記事も少しでも同じポイントで悩む方の参考になればうれしいです。
さぁ、もうひと頑張りするかなっ!
-
前の記事
Laravel:.evnを変更してもQueueがsyncで実行。workも動かない。その原因 2019.06.27
-
次の記事
今の時代の企業ポータル 2019.08.01
コメントを残す