サーバーを扱う時にshellコマンドやshellスクリプトは必須です。
コマンドは、慣れてくるとGUIで操作するのが馬鹿らしくなってくるほど便利な事が多いことに気が付きます。
所詮GUIはCUIコマンドをマウスを使って操作するだけの事でいかに手が早く動かせるかの勝負だが、
CUIであれば、キーボードのタイピングとコマンドの知識でいかようにでも効率化できます。
そこにスクリプトを覚えれば、自分の行う処理を自動化したり、サーバーでの操作をかなり便利に行う事が用意にわかります。
トラブルの始まり
とりあえず、ここではshellスクリプトの講座を行うのではなく、以下のファイル読み込みの基本構造を使って、複数サーバー管理を行なった以前のブログでハマったので、メモっておきます。
「サーバー管理ツールを作る #1「複数サーバー管理」」
Shellスクリプトの基本
下記のプログラムで、特定のファイルを行毎に読み込み、画面に表示することができる。
dataFile="/data.txt"
while read line
do
echo ${line}
done<$dataFile
応用
これを応用して、複数のサーバーに対してsshでコマンドを実行すれば、一般の管理ツールと同じ事ができると思って実行
# vagrantで試しに作ってみてください。
192.168.1.2
192.168.1.3
dataFile="/data.txt"
while read line
do
echo `ssh ${line} hostname`
done<$dataFile
結果
> server1
何故か1行しか結果が返ってきません。
途中でサーバーアクセスがハングしているのかとずっと思って悩んでいたら、同じ事でハマった方のページを見つけ解決しました。
http://b.l0g.jp/dev/ssh-inside-while/
解決
dataFile="/data.txt"
while read line
do
echo `ssh -n ${line} hostname`
done<$dataFile
結果
> server1
> server2
"-n"オプションをつけるとよかったんですね。
どうやらsshを実行すると、結果に対してコマンドが終了してしまうらしいので、-nオプションをつけて、/dev/nullとして、終了を阻止するという事らしいです。
この-nオプションて、何に使うのかがずっと疑問だったんですが、こういう為だったんですね。
でも、これ以外に何に使うのか?スクリプトの為のオプション??
ますます謎ですが、とりあえず、解決して安心です。
0 件のコメント:
コメントを投稿