ハイパーニートプログラマーへの道

頑張ったり頑張らなかったり

Railsサーバーを終了させるシェルスクリプト

(12/16更新)
いや、実は・・・。

以前に端末のショートカット設定をやったときに、Ctrl+Cをコピーに設定していたようで(汗
それじゃあkillできないよね・・・。

というわけで設定し直したのがこちら:
【Ubuntu】端末のキーボードショートカット設定(コピぺできるように) - ハイパーニートプログラマーへの道

これでCtrl+Ckillできるようになりました・・・。

今記事のようにシェルスクリプトを作る必要はなかったんや・・・。


shell script to kill rails s

Ubuntu14.04にてRuby on Rails4をインストール(ctrl + cが効かない・・・だと?) - ハイパーニートプログラマーへの道

どうしてもctrl + cで止まらん。PID調べるのもめんどい。というわけで

まずPIDだけ取得

まずコマンド打って試してみます。ctrl + zでサーバーを停止させたあと・・・。

$ ps aux | grep rails[[:space:]]s
noriyo_+  3297  3.2  3.4 175080 71548 pts/0    Tl   17:21   0:01 /home/noriyo_tcp/.rvm/rubies/ruby-2.1.1/bin/ruby bin/rails s
$ ps aux | grep rails[[:space:]]s | awk '{print $2}'
3297

逆引きUNIXコマンド/grepでタブを検索する方法 - Linuxと過ごす

を参考に。[:space:]では空白もタブも区別できないそうですが、今の場合はまあいいかと。railssのあいだの空白をなんとかできればいいので。 ps aux | grep rails[[:space:]]s | awk '{print $2}'を記述したスクリプトを作るかと。

ちゃんとシェルスクリプト作るのって初めてのような希ガス
homeにbinつくっちゃえばいいのかな?(適当)

$ cd
$ mkdir bin
$ cd bin/
$ vi killrails_s.sh

killrails_s.shという名前で

まずPIDだけ出すスクリプト

参考にしたのはここら辺

プロセスの名前からプロセスをkillするには? - Linux入門

$ vi killrails_s.sh
#!/bin/sh
ps aux | grep rails[[:space]]s | awk '{print $2}'

実行権限与えての確認と。

$ chmod u+x killrails_s.sh
$ ls -l killrails_s.sh 
-rwxrw-r-- 1 noriyo_tcp noriyo_tcp 61  923 20:14 killrails_s.sh

.bashrcにパスを追加して反映させて・・・

export PATH="$PATH:$HOME/bin"
$ source ~/.bashrc

試してみる

またサーバーを一時停止させたあと

$ killrails_s.sh 
2557
$ kill -9 2557
$ fg
bash: fg: ジョブは終了しました
[1]+  強制終了            rails s

PIDを取得後、それをkill -9で指定してkill。fgしてもこのように「終了しました」と。

一気にkillもしてくれるようにする

kill -9 `ps aux | grep rails[[:space:]]s | awk '{print $2}'`

先ほどのコマンドを`で囲って、その実行結果をkill -9の引数にしてしまう。

^Z
[1]+  停止                  rails s
$ killrails_s.sh 
$ fg
bash: fg: ジョブは終了しました
[1]+  強制終了            rails s

できた・・・よね?
何かまずいことがあるか分からんですけど、とりあえずこれで。

ctrl + zはめんどいけど、それは分けといた方がいいのかなあと。

参考記事;

プロセスの名前からプロセスをkillするには? - Linux入門

逆引きUNIXコマンド/grepでタブを検索する方法 - Linuxと過ごす

シェルスクリプト入門 [シェルの作成・実行]

[bash] シェルスクリプト入門 ~シェルスクリプトのいろは~ - SUNONE BLOG

ITmedia エンタープライズ : Linux Tips「パスを追加したい〜.bashrc編〜」

Windowsユーザーに教えるLinuxの常識(3):各ディレクトリの役割を知ろう(サブディレクトリ編) (2/2) - @IT

シェルスクリプトの作成場所シェルスクリプトは普通どこ... - Yahoo!知恵袋