ターミナルを閉じてもrubyを実行し続けるには

今までは、ターミナル上でrubyの実行を行っていましたが、全て完結するものを書いていました。

では、ターミナルを閉じても実行するにはどうしたらいいのでしょうか?

それにはまず、プロセスIDというものを理解することが必要です。

【プロセスID】

プロセスIDはアプリケーションが実行されている場所を示しているものであり、アプリケーションなどを実行すると自動で割り当てられます。

Macの場合、プロセスIDを確認する方法は2種類あります。

アクティビティモニタを利用

アクティビティモニタを利用して確認するには、アクティビティモニタを起動して、その中の「PID」というのを見ることで確認することができます。

・コマンドを利用

アクティビティモニタを使う以外にも、macでは「psコマンド」で知ることが確認することができます。具体的には「ps aux」というコマンドを入力することで現在実行されているプロセスの一覧を確認することができます。

auxはそれぞれ

a:自分以外のユーザーのプロセスも表示する
u:ユーザー名と開始時刻を表示する
x:制御端末のないプロセスの情報も表示する

というオプションになっていて、それを全て表示しようとすると「aux」というコマンドになります。

【バックグラウンドでの実行】

では、本題のターミナルを閉じても実行し続けるには、という話ですが、方法は簡単です。いつもrubyを実行しているコマンドを「nohup いつものコマンド &」という形で囲むだけです。

例えば、今の時間を表示し続ける「time.rb」というコードを書いたとします。

--time.rb--

while true
  day = Time.now
  puts "#{day.sec}"
  sleep(1)
end

----------

これをバックグランドで実行し続けるには

nohup ruby time.rb &

というように書けばOKです。

試しに実行してみて、ターミナルを閉じ、実行されているかプロセスIDを見て確認してみましょう。

ps aux | grep ruby

すると、しっかり実行されているのがわかると思います。

そのように実行を確認したら

kill プロセスID

でプロセスを終了させましょう。

 

これを用いれば、データの自動収集などを行うことができそうです。