答え1
私はraspbianについては知りませんが、Debianから派生したので、nohupも利用できると仮定します。プロセスを実行する代わりに、
$ proc &
以下を試してください。
$ nohup proc &
nohup は、端末接続が切断されたときにプロセスが終了するのを防ぎます。 HTH。
答え2
あなたの質問には詳細が少し足りないので、Piコンソールでサーバーを起動するコマンドを入力し、フォアグラウンドで実行されたことを意味します。
この場合、実装の複雑さに応じて5つのオプションがあります。
使用@f-Tasserの返信。 GNU/Linux を初めて使用する場合、この
&
シンボルは通常実行する操作 (つまり、プロンプトに戻る前にコマンドが完了するのを待つ) ではなく、バックグラウンドでプロセスを実行し、すぐにプロンプトに戻る必要があることをシェルにお知らせします。 。技術的には、これはコマンドをバックグラウンドにフォークすることです。以前に行った操作を段階的に実行します
screen
。デフォルトでは、このコマンドscreen
はDebianシステムにインストールしsudo apt-get install screen
てからサーバーを起動するコマンドを入力する前に実行する必要がありますscreen
。これにより、PuTTY接続がこのように中断されても、後で再接続できる新しいシェルが開きます。したがって、接続が切断されていないかのように動作します。よく分からないなら
screen
読んでみるといいと思います。ウィキペディアそしてマンページから。を使用して同じことを行うこともできますtmux
。使用永遠にNode.jsモジュール。バラよりhttps://stackoverflow.com/questions/4797050/how-to-run-process-as-Background-and-never-die私はこれをどこで得ましたか?
サーバーを
screen
バックグラウンドプロセスに配置します。つまり、screen
バックグラウンドで新しいセッションを作成しますが、接続しません。また、画面プロセスはシェルを実行する代わりにサーバーを実行します。次のように入力します。screen -d -m exec_your_server --put-args-here
必要に応じて起動時に実行できます。デフォルトでは、画面コマンドをファイルまたは
/etc/rc.local
に入れる必要がありますが、/etc/rc.d/rc.local
どちらかを忘れていました。これを行うのに問題がある場合は、新しい質問をしてください。同様に、同じことができます
tmux
。サービススクリプトを作成します。あなたはDebianを使用していて初めて使用するので、おそらくDebianが提供するデフォルト設定で
init
あるSystem V Initを使用しているでしょう。私はSystem V Init用のサービスファイルを見たことがなく、systemdとわずかなUpstartだけを見ました。したがって、ここでは助けることができません。この質問を続けるには、新しい質問をしてください。IMHOこれは最小限の「ハッキング」方法であり、サーバーを長時間実行している場合は、次のコマンドを使用してシステムの他のサービスのようにサーバーを管理できるため、この方法を考慮する必要があります
sudo service your_server stop
。この方法は起動時にサーバーを自動的に起動し、screen
バックグラウンドでも自動的に発生するため、必要はありません。また、自動的にrootとして実行されますが、これは危険です。サーバー用に特別に作成された権限のないユーザーになり、自分が持っている権限を放棄するロジックをサーバーに入れる必要があります。 (これはサーバーが破損するのを防ぐためです。誰かがあなたのサーバーを介してrootとして何かを実行できると想像してください!この問題これについて話すのはうれしかったです。 )
答え3
使用監督本当にマジだったら。
バイナリを実行する基本的な方法は次のとおりです。
$ nohup node app &
$ echo $! > node-instance.pid
それから殺したいとき
$ kill `cat node-instance.pid`
しかし、私はSupervisordを使います。それはあなたが多くの素晴らしい仕事をすることを可能にします。
答え4
Bashシェルを実行している場合は、オプションでこのdisown
コマンドを使用できます。このコマンドは、nohup
見つかった最初の実行プログラムを使用することを除いて、同じことを行います。たとえば、
$ command &
$ disown
あるいは、プロセスを分岐して親プロセスを終了して、子プロセスがinitによって継承されるようにするスクリプトを生成することもできます。たとえば、これが私がスクリプトでしたことです。簡単ではありませんが、起動すると自動的にバックグラウンドに入り、ログアウトしても終了しません。
別の解決策は、簡単なコマンドで起動、停止、再起動、またはすべての操作を実行できるようにサービスファイルを作成して有効にすることです。 (しかし私はarchlinuxを使用しているので、Debianがsystemdを使用しているかどうかはわかりません)