GithubHelp home page GithubHelp logo

Comments (18)

tkmsst avatar tkmsst commented on April 28, 2024 2

yamaken-sapporoさんありがとうございます。
解決致しました!

"pm2 startup --wait-ip"後のpm2-root.serviceは下記のようになっていました。

[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target network-online.target
Wants=network-online.target
Restart=on-failure

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/$
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target network-online.target

これを、ご指摘の通り

After=network-online.target
WantedBy=network-online.target

とすることによりうまくいきました。
ありがとうございます。

from mirakurun.

tkmsst avatar tkmsst commented on April 28, 2024 2

オリジナルだとうまくいかないのがことの発端なので

pm2 startup --wait-ip

を実行した結果、下記のテンプレートを使うようになっているようです。
https://github.com/Unitech/pm2/blob/master/lib/templates/init-scripts/systemd-online.tpl

やはりおかしいと思うので、pull request書きました。
Unitech/pm2#4285

from mirakurun.

kanreisa avatar kanreisa commented on April 28, 2024 2

@2.12.0 で挙動を改善してみました。皆様フィードバックありがとうございました。

from mirakurun.

yamakenjp avatar yamakenjp commented on April 28, 2024 1

横からですが、

Platform: Linux Debian Stretch

とのことなので、systemdから pm2が動いてるかと思います。

/etc/systemd/system/pm2-root.service について

After=network.target
WantedBy=multi-user.target

になってますかね。
普通networkが立ち上がってからpm2が起動するはずですが、これでダメの場合、
systemd-networkd-wait-online
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

を有効にすれば解決できそうです。

sudo systemctl enable systemd-networkd (おそらくすでに有効のはず)
sudo systemctl enable systemd-networkd-wait-online

を実行し

/etc/systemd/system/pm2-root.service

After=network-online.target
WantedBy=network-online.target

に書き換えればnetwork起動後にpm2を起動できるかと。

from mirakurun.

kanreisa avatar kanreisa commented on April 28, 2024

大変お手数ですが下記の対応をしていただけると助かります。

# 再現させた状態で
sudo -i
pm2 -v
pm2 status

netstat -ap | grep Mirakurun
netstat -ap | grep 40772

from mirakurun.

tkmsst avatar tkmsst commented on April 28, 2024

ご返答ありがとうございます。アップしました。
https://gist.github.com/epgdatacapbon/03fb296741c2bc00dd6bdfc6bca926cd
なお、この状態ではBonDriver_Mirakurunで初期化ができないエラーで視聴できませんが、
#pm2 restart mirakurun-server
で正常に動作するようになります。

ただ、古いバージョンを入れなしたところ、最初は再起動してもうまく行きましたが、
何回か繰り返しているうちに古いバージョンでもエラーが出るようになったため
こちらの環境の問題がありそうです。

from mirakurun.

kanreisa avatar kanreisa commented on April 28, 2024

ログを見る限り NIC に割り当てられている IP アドレスで LISTEN されていないようです。
2.11.0 で起動時間が短縮したことによる影響かもしれません。
NIC が有効になる前に起動してしまっている気がします。

一旦 PM2 のサービスを再登録してみてください

sudo -i
pm2 unstartup
sudo reboot # ここで一旦再起動して pm2 がスタートアップしないことを確認する
#
sudo -i
pm2 startup

適当に pm2 の起動を遅らせるか、NIC の初期化が遅延しないようにすると解決すると思います

from mirakurun.

tkmsst avatar tkmsst commented on April 28, 2024

早速のご返答ありがとうございます。
一旦 PM2 のサービスを再登録しても解決しなかったため、
/etc/systemd/system/pm2-root.service
について

[Service]
ExecStartPre=/bin/sleep 5

を追加してpm2の起動を遅らせることにより対応できました。
ありがとうございました。

from mirakurun.

akimasa avatar akimasa commented on April 28, 2024

横から失礼します。
下記のコマンドを実行するといかがでしょうか?
sudo pm2 startup --wait-ip

PM2 2.9.0以降ではネットワークが起動するのを待ってから開始するオプションがあるみたいです

from mirakurun.

kanreisa avatar kanreisa commented on April 28, 2024

すばら C

from mirakurun.

tkmsst avatar tkmsst commented on April 28, 2024

pm2 Ver. 3.5.0で

sudo pm2 startup --wait-ip

sudo pm2 startup systemd --wait-ip

を試しましたが、うまくいきませんでした。

from mirakurun.

yamakenjp avatar yamakenjp commented on April 28, 2024

[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target network-online.target
Wants=network-online.target
Restart=on-failure

うーん、AfterとWantsで network-online.target が謎というか意味がないですね。
Wantsの方が不要かと思います。
ちなみにAfterとWantsの違いですがWantsは指定されているものが起動失敗しても
この場合においてだとpm2は起動してしまうので、切り分けができない気が。

ちなみにデフォルトテンプレートは下記のはずなのですが、色々変更しましたか?

https://github.com/Unitech/pm2/blob/master/lib/templates/init-scripts/systemd.tpl

from mirakurun.

akimasa avatar akimasa commented on April 28, 2024

sudo pm2 startup --wait-ipを実行してもらっているので、下のテンプレートが使われていると思います。
https://github.com/Unitech/pm2/blob/master/lib/templates/init-scripts/systemd-online.tpl
AfterとWantsでnetwork-online.targetが指定されています。
PM2側の修正が必要でしょうかね?

from mirakurun.

yamakenjp avatar yamakenjp commented on April 28, 2024

sudo pm2 startup --wait-ip を実行してもらっているので、下のテンプレートが使われていると思います。

あ、そいえばこの前提を忘れてました。
とりあえず、動いてよかった!
pm2にmargeされればみんな幸せ!

from mirakurun.

akimasa avatar akimasa commented on April 28, 2024

pm2の修正なしで何とかする方法があるのではないかと思い、試していましたが、勘違いかもしれないので何でもないです。
すみません。

from mirakurun.

akimasa avatar akimasa commented on April 28, 2024

Debian Stretchを入れてみて気が付いたのですが、Debianはsystemd-networkdを使っていないみたいです。

なのでsystemd-networkd-wait-onlineの意味がなかったです…

After=network-online.target
WantedBy=network-online.target

Debian Stretchでpm2-root.serviceに上記の修正を加えてみましたが、LANが接続されていない状態で起動してしばらく経ってからLANに接続すると、MirakurunがLANのIPアドレスでLISTENしませんでした。
systemd-networkdを採用しているArch Linuxでは上記の修正なしでsudo pm2 startup --wait-ipを実行して、シャットダウン。LANが接続されていない状態で起動してしばらく経ってからLANに接続すると、LANに接続されるのを待ってからpm2が起動して、LANでLISTENしていました。

したがって、 Unitech/pm2#4285 の修正を行っても、うまくいかない場合がある気がします。修正なしでも環境によってはIPアドレス取得の遅延が起きても問題ない場合もあります。

Debian Stretchのネットワーク周りが怪しい気がします。ググったら、Debianでnetwork-online.targetがうまく動いていないとの質問がありました。自分が確認した限りではArchもRaspbianもIPアドレスが取得されるまでnetwork-online.targetに達することは無かったですが、DebianだけはIPアドレスが取得されていない状態ですぐにnetwork-online.targetに達してしまうようです。

Debianにsystemd-networkdが来れば簡単に解決できそうですが、それ以外に何かうまい方法はありませんかね?

from mirakurun.

tkmsst avatar tkmsst commented on April 28, 2024

クリーンインストールして再度試してみました。
akimasaさんのおっしゃる通りパッチだけではダメで、下記のコマンドを実行する必要がありました。

sudo systemctl enable systemd-networkd
sudo systemctl enable systemd-networkd-wait-online

from mirakurun.

akimasa avatar akimasa commented on April 28, 2024

返事が遅くなってすみません。

先ほど、こちらの環境でも試してみました。
クリーンインストールをした上で、epgdatacapbonさんの挙げてくれたコマンドを実行したところ、正常にアクセスすることができました!
PM2のパッチは無しで大丈夫でした。

Mirakurunのインストール後、下記のコマンドだけを実行すれば大丈夫そうです。

pm2 startup systemd --wait-ip
systemctl enable systemd-networkd
systemctl enable systemd-networkd-wait-online

from mirakurun.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.