LoginSignup
narunblog
@narunblog

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【急募】エックスサーバー でforeverを実行して、SSH切断すると切れる時の対処法

解決したいこと

エックスサーバー でforeverコマンドを使い、pythonプログラムを常時起動したい。
npmをインストールしてforeverコマンドを使うとこまではできました。
SSH接続したエックスサーバー を切断するとforeverで実行しているプログラムまで落ちます。
解決方法や代替案などありましたら教えてください。

発生している問題・エラー

エックスサーバー 上でfoeverコマンド実行

$ forever -c python test/test.py

foreverが動いているか確認

$ forever list
#[0] pZUM python  test/test2.py

この状態でSSH接続しているコマンドラインを切断する

$ forever list
#No forever processes running

エックスサーバー でforever動かしている記事など読んでもこのエラーが発生しているものを見つけられませんでした。
どなたかお力をお貸しいただけると助かります。

追記・解決策あり

どうやら実行しているコマンドが間違っていたようでした。

#間違いコマンド
forever -c python test/test.py

#正しいコマンド
forever start -c python test/test.py

なお、間違いコマンドでもSSH切断するまでは、しっかりと動作します。

反省点

foreverのドキュメントに書いてあるコマンドとは違ったコマンドを実行していたみたいです。
多分foreverインストールの際に参考にさせていただいたサイトに載っているコマンドです。

人のせいではなく、100%自分が悪いのですが。

参考にしつつも、しっかりとドキュメントを読む癖を少しずつ付けて行こうと思いました。

感謝

この問題を解決に導いてくれた

@tukiyo3さん
@rithmetyさん

ありがとうございました!

0

5Answer

xserverのサポートに問い合わせてみました。
結果がでしだい、ここにコメントしたいと思います!

お付き合いいただきありがとうございました!

1

Comments

  1. @narunblog

    Questioner
    その後エックスサーバー から回答がありましたので追加します。

    まず、サーバー自体にSSH切断後にプロセスを終了することは行われていないようです。

    そして、解決策は@tukiyo3さんが提案された「ps x」コマンドでの動作確認でした。
    最終的に他の方のコメントを参考に解決することができました。

    最後まで親切にありがとうございました!

npm の forever のページによれば

forever --help の実行で下記のテキストが表示されるようです。

// 前略

[Long Running Process]
  The forever process will continue to run outputting log messages to the console.
  ex. forever -o out.log -e err.log my-script.js

[Daemon]
  The forever process will run as a daemon which will make the target process start
  in the background. This is extremely useful for remote starting simple node.js scripts
  without using nohup. It is recommended to run start with -o -l, & -e.
  ex. forever start -l forever.log -o out.log -e err.log my-daemon.js
      forever stop my-daemon.js

forever -c python test/test.py ではなく
forever start -c python test/test.py ならうまくいくかもしれません。

1

Comments

  1. @narunblog

    Questioner
    コメントありがとうございます!

    こちらの方法で試してみたら、うまく行きました!
    どうやら、コマンドの実行方法が間違っていたようです。

    間違いコマンド
    forever -c python test/test.py
    で実行しても、正常に動作するので思わぬ沼にハマってしまいました。

    今後はhelpなどをよく読んでコマンドを実行したいと思います。

ぱっと3つ思いつきます。

  1. screenを起動してコマンド実行
  2. nohup を使う
  3. cronなどのサービスから実行させる
0

コメントありがとうございます!

アドバイスいただいた3つの内2つを試してみました。
1.screenを使う
こちらはエックスサーバー のため、root権限で実行できずインストールできませんでした。

2.nohupを使う
こちらで実行を行いましたが、SSH接続を切断すると変わらず、処理が終了してしまいます。

3.cronを使う
こちらについては、動かしたいものが常時起動なのでcronでは難しいのかなと思っています?
cronは定期実行を行うためのものという認識です。
それともcronで常時実行する何かしらの方法があるのでしょうか。

随時、解決策を募集しております。

0

Comments

  1. @narunblog

    Questioner
    何度もコメントありがとうございます!

    &もしっかりつけて実行しています。

    nohup forever -c python test.py &
    これで起動かけてforever listで確認はできました。
    しかし、その後SSH接続を切断するとforeverで実行しているはずのプログラムが終了しています。

    質問を書いてて思いついたのですが、もしかして nohup ssh~~~~~~~~ &のようにssh接続するコマンドを変更するのでしょうか?
  2. nohup ssh~~~~~~~~ &
    だとsshが切れたら終わります。

    forever listで確認というよりは
    ps -ef | grep python
    とかで確認してみてはいかがでしょうか
  3. @narunblog

    Questioner
    確認してみたところ、
    pts/0 forever -c python test/test2.py
    pts/0 python test/test2.py
    pts/1 grep --color=auto python
    ※部分省略しています

    上記のような返答になりました。
    動かしたいファイルは動作しているように見受けられます。

    この状態でSSH接続を切断するとやはり何もない状態になります。
    pts/0 grep --color=auto python
    これだけは確認できました。

Your answer might help someone💌