Bash-バックグラウンドのRubyスクリプトからSTDOUTを取得する方法

ソニーサントス

1つのrubyスクリプトをバックグラウンドで実行する必要がありますが、その出力をリアルタイムで確認したいと思います。

私はという簡単なテストを書きましたloop.rb

#!/usr/bin/env ruby

(1..4).each do
  puts "loop!"
  sleep 1
end

そのフォアグラウンド出力は次のとおりです。

sony@sonymint:~/test$ ./loop.rb
loop!
loop!
loop!
loop!

しかし、私はそれをバックグラウンドで見ることができません:

sony@sonymint:~/test$ ./loop.rb &
[2] 3935
sony@sonymint:~/test$ 

ただし、pingの出力はバックグラウンドで確認できます

sony@sonymint:~/test$ ping google.com &
[2] 3734                                                                                                                                                                                                                                                                     
sony@sonymint:~/test$ PING google.com (64.233.190.113) 56(84) bytes of data.                                                                                                                                                                                                 
64 bytes from ce-in-f113.1e100.net (64.233.190.113): icmp_seq=1 ttl=42 time=79.6 ms                                                                                                                                                                                          
64 bytes from ce-in-f113.1e100.net (64.233.190.113): icmp_seq=2 ttl=42 time=79.5 ms                                                                                                                                                                                          
64 bytes from ce-in-f113.1e100.net (64.233.190.113): icmp_seq=3 ttl=42 time=81.7 ms                                                                            

したがって、2つの質問:

  1. の出力ではpingなく、の出力を表示できるのはなぜloop.rbですか?

  2. loop.rbBashでバックグラウンドでの出力を取得するにはどうすればよいですか?

更新

コメントの@TomLordは正しいです:いくつかの奇妙なシステム構成があります。ローカルでは、私rubyはプレーンインストールのRubyインタープリターではありません。これはruby、Dockerコンテナ内で実行されるスクリプトです。したがって、Dockerの問題である可能性があります。プレーンインストールされたRubyインタープリターを備えたマシンでテストしましたが、正常に動作しました。次に、Dockerのバッファリングの問題を調査します。

ソニーサントス

私は問題と解決策を見つけました。

問題:

  1. の出力ではpingなく、の出力を表示できるのはなぜloop.rbですか?

私のローカルrubyは本物のルビーインタプリタではありませんがruby、Dockerコンテナ内で実行されるスクリプトですrvmIMHOを使用するよりも管理が簡単です)。つまり、Dockerパイプバッファの問題です。

ソリューション:

  1. loop.rbBashでバックグラウンドでの出力を取得するにはどうすればよいですか?

unbufferコマンドを使用して

sony@sonymint:~/test$ unbuffer ./loop.rb & 
[3] 7262
sony@sonymint:~/test$ loop! 
loop! 
loop! 
loop! 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プロセスをbashスクリプトからバックグラウンドに強制する

分類Dev

プロセスをbashスクリプトからバックグラウンドに強制する

分類Dev

同じbashスクリプトから起動されたバックグラウンドプロセスの実行ステータスを確認する

分類Dev

バックグラウンドでbashスクリプトを自動的に実行する方法は?

分類Dev

バックグラウンドでBashスクリプトを実行する方法

分類Dev

bashスクリプトから、「ウィンドウのサイズ変更」のキーバインドを取得する方法はありますか?

分類Dev

PHP / bashスクリプトからバックグラウンドプロセスを開始/終了するにはどうすればよいですか?

分類Dev

別のbashスクリプトからバックグラウンドでbashスクリプトを実行できません

分類Dev

バックグラウンドで一定数のジョブを実行するbashスクリプト

分類Dev

久しぶりにbashスクリプトで複数のバックグラウンドプログラムをSIGINTする方法は?

分類Dev

Linuxのコマンドライン(別名bashスクリプト)からデバッグモードでQtプロジェクトをビルドする

分類Dev

スクリプトを終了するときにbashスクリプトのバックグラウンドプロセスを強制終了する

分類Dev

端末の正しい行にログオンするために、1つの初期起動スクリプトから生成された複数のbashバックグラウンドスクリプトを取得するにはどうすればよいですか?

分類Dev

バックグラウンドでコマンドを複数回実行する(bashスクリプト)

分類Dev

bashでバックグラウンドプロセスの終了ステータスを取得する

分類Dev

パイプされたbashスクリプトをバックグラウンドで実行する

分類Dev

bashスクリプトは、バックグラウンドで実行されているかどうかをどのように検出できますか?

分類Dev

デフォルトでバックグラウンドでbashスクリプトを実行する

分類Dev

Bash:バックグラウンドプロセスからメッセージを受信する

分類Dev

バックグラウンドタスクを実行するスクリプトでのbashコマンド置換

分類Dev

スクリプトまたはスクリプトが作成するバックグラウンドジョブのいずれかでエラーが発生した場合は、bashスクリプトを終了します

分類Dev

自分自身をバックグラウンドに置くフォアグラウンドbashスクリプト

分類Dev

bash スクリプトからターミナル ウィンドウの名前を変更する方法は?

分類Dev

起動時およびRaspberryPiのバックグラウンドで無限のwhileループを使用してbashスクリプトを実行する

分類Dev

「孤立した」バックグラウンドプロセスを開始するためのBashスクリプト

分類Dev

bashスクリプトからプログラムウィンドウを配置しますか?

分類Dev

バックグラウンドプロセスIDを取得するbashは親pidを提供します

分類Dev

Bash:「&」を使用してバックグラウンドでスクリプトを実行し、「||」を使用する方法 失敗時に何か他のものを実行するには?

分類Dev

バックグラウンドプロセスを順次開始するデタッチループを実行するBashスクリプト

Related 関連記事

  1. 1

    プロセスをbashスクリプトからバックグラウンドに強制する

  2. 2

    プロセスをbashスクリプトからバックグラウンドに強制する

  3. 3

    同じbashスクリプトから起動されたバックグラウンドプロセスの実行ステータスを確認する

  4. 4

    バックグラウンドでbashスクリプトを自動的に実行する方法は?

  5. 5

    バックグラウンドでBashスクリプトを実行する方法

  6. 6

    bashスクリプトから、「ウィンドウのサイズ変更」のキーバインドを取得する方法はありますか?

  7. 7

    PHP / bashスクリプトからバックグラウンドプロセスを開始/終了するにはどうすればよいですか?

  8. 8

    別のbashスクリプトからバックグラウンドでbashスクリプトを実行できません

  9. 9

    バックグラウンドで一定数のジョブを実行するbashスクリプト

  10. 10

    久しぶりにbashスクリプトで複数のバックグラウンドプログラムをSIGINTする方法は?

  11. 11

    Linuxのコマンドライン(別名bashスクリプト)からデバッグモードでQtプロジェクトをビルドする

  12. 12

    スクリプトを終了するときにbashスクリプトのバックグラウンドプロセスを強制終了する

  13. 13

    端末の正しい行にログオンするために、1つの初期起動スクリプトから生成された複数のbashバックグラウンドスクリプトを取得するにはどうすればよいですか?

  14. 14

    バックグラウンドでコマンドを複数回実行する(bashスクリプト)

  15. 15

    bashでバックグラウンドプロセスの終了ステータスを取得する

  16. 16

    パイプされたbashスクリプトをバックグラウンドで実行する

  17. 17

    bashスクリプトは、バックグラウンドで実行されているかどうかをどのように検出できますか?

  18. 18

    デフォルトでバックグラウンドでbashスクリプトを実行する

  19. 19

    Bash:バックグラウンドプロセスからメッセージを受信する

  20. 20

    バックグラウンドタスクを実行するスクリプトでのbashコマンド置換

  21. 21

    スクリプトまたはスクリプトが作成するバックグラウンドジョブのいずれかでエラーが発生した場合は、bashスクリプトを終了します

  22. 22

    自分自身をバックグラウンドに置くフォアグラウンドbashスクリプト

  23. 23

    bash スクリプトからターミナル ウィンドウの名前を変更する方法は?

  24. 24

    起動時およびRaspberryPiのバックグラウンドで無限のwhileループを使用してbashスクリプトを実行する

  25. 25

    「孤立した」バックグラウンドプロセスを開始するためのBashスクリプト

  26. 26

    bashスクリプトからプログラムウィンドウを配置しますか?

  27. 27

    バックグラウンドプロセスIDを取得するbashは親pidを提供します

  28. 28

    Bash:「&」を使用してバックグラウンドでスクリプトを実行し、「||」を使用する方法 失敗時に何か他のものを実行するには?

  29. 29

    バックグラウンドプロセスを順次開始するデタッチループを実行するBashスクリプト

ホットタグ

アーカイブ