プログラムをサービスとして実行する方法(サイレント)


23

ターミナルから起動するpythonベースのサーバーがあります。ターミナルのこの特定のインスタンスは、プログラムに制御を与え、プログラムは、閉じられるまで、それを一種のロギングウィンドウとして使用します。これは正常ですか、それとも単にアクティブなプロセスとして表示される他の方法でプログラムを起動しようとする必要がありますか?プログラムを開始した端末を閉じると、プログラムはそれで終了します。

ありがとうございました


PHPは、あまりにも、この答えで述べたが、それは、Pythonに適用されます。 askubuntu.com/questions/26555/running-php-cli-server/...

回答:


9

古いbashでさえ、プロセスをバックグラウンドに送信するために&を使用していますが、他にもいくつかの方法があります..しかし、基本的な2つは次のとおりです。

1.)$~ your_command > outputfile_for_stdout &
        # runs your command in background, giving you only PID so you can exit that process by `kill -9 PID_of_process`
        # & goes at the end of row      


2.)$~ your_command > outputfile_for_stdout 
        # this will run your program normally
        # press  Ctrl + Z then program will pause
   $~ bg
        # now your program is running in background
   $~ fg
        # now your program came back to foreground
3.)you can run terminal window under screen command so it will live until you either kill it or you reboot your machine
   $~ screen
   $~ run_all_your_commands
       # Ctrl + A + D will then detach this screen
   $~ screen -r will reattach it

その他の便利なコマンド:

   $~ jobs
        # will show you all processes running right now, but without PID
   $~ ps
        # will show you all processes for actual terminal window

うーん、私は今までプロセスを表示するためにコマンド「トップ」を使用していた
-U2ros

素晴らしい解決策。pidがファイルに保存されるように1.オプションを変更する方法はありますか。そのため、ログファイルとpidファイルが生成されます。
オグズビルジック

27

デーモン(サービス)にする
daemon --name="yourservicename" --output=log.txt sh yourscript.sh


7
$ servicename &

を使用する&と、プログラムが終了するまでシェルをブロックする代わりに、プログラムがバックグラウンドで実行されます。


いいえ、そうではありません。例えば。dixon@dixon-vaio:~$ nautilus & [1] 11835。プロセスIDを返し、新しいシェルプロンプトが表示されます。これも確認してください:http : //unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
dixoncx

1
私は立ち直る。採決は削除されました。
スコットセヴェランス


0

ターミナルからscreenコマンドを実行またはフォローアップすることもできます&。連続プロセスを実行する簡単な方法。


&私の意見では、この場合のプロセスのバックグラウンドとして使用することはほとんどありません。OPは、サーバーがstdoutにログを記録するため、&端末の出力が乱雑になると述べています。また、OPは端末を閉じることに言及しているため、OPはプロセスを再びフォアグラウンドにできず、すべてのログ出力が失われます。少なくとも、ログファイルにリダイレクトするか、screenセットアップに固執することをお勧めします。ただし、screenOP の基本(デタッチ/アタッチなど)を説明してください
ロバートリード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.