下級エンジニアの綴

新しく発見したことを綴っていこうと思っています。夢はでっかく上級エンジニアになることです。

ssh先のサーバでrailsサーバを立ち上げるシェルを書いたのはいいけど、sshをkillするとrailsのプロセスが残ったままになったのでメモ

今回ハマった点ですが、タイトルの名の通りssh先のサーバでrailsサーバを立てるシェルを書いたのでが、ctrl + c で抜けるとsshはkillされてrailsのプロセスがssh先のサーバで残ったままだったので、解決方法を模索したメモになります。

ssh hostname 'rails s -b 0.0.0.0 -p 3005'

とコマンドを実行した時、ssh先のサーバでrailsサーバを立ち上げてテストを行おうと思っており、実際に問題なく立ち上げることには成功しました。しかし、ctrl + cで処理を終了させるとsshのプロセスだけ死んでrails sのプロセスだけずっと残ったままでした。

プロセスを確認すると↓のようになっており、

$ ps aux | grep ruby
508      17276  1.0  5.2 406732 155300 ?       Sl   12:24   0:05 bin/rails s -b 0.0.0.0 -p 3105
508      17587  0.0  0.0  81796   836 pts/0    S+   12:32   0:00 grep ruby

調べてみると、ttyとかptsの問題のようでした。 下記の記事でわかりやすく説明してくださってました。

qiita.com

簡潔に説明すると

ターミナルからアクセスしていると pts/ というものが表示され、 と表示されている場合はdemonで立ち上がっているよという目印みたいでした。

上記を解決する方法ですが、

ssh -t hostname 'rails s -b 0.0.0.0 -p 3005'

-t オプションを付ければ良いみたいでした。