bashワンライナーを繰り返し実行
1行だけのプログラムコードをワンライナーと呼びます。
bashでは セミコロン";" で区切ることで、繰り返し処理をワンライナーにできます。
システム障害発生時などで状態確認コマンドを定期的に実行するときに用いる場合が多いです。
例) httpdというプロセスが上がっているか定期的に確認する
$while true ; do ps aux | grep httpd ; echo ""; sleep 2 ; done ;
daemon 5762 0.0 0.3 11540 3000 ? S May01 0:00 /usr/sbin/httpd
netscreen 7196 0.0 0.0 3080 708 pts/5 S+ 09:19 0:00 grep httpd
daemon 34413 0.0 0.3 11540 2992 ? S May01 0:00 /usr/sbin/httpd
root 40539 0.0 0.5 11408 4704 ? Ss Apr23 0:15 /usr/sbin/httpd
daemon 5762 0.0 0.3 11540 3000 ? S May01 0:00 /usr/sbin/httpd
netscreen 7322 0.0 0.0 3080 712 pts/5 S+ 09:19 0:00 grep httpd
daemon 34413 0.0 0.3 11540 2992 ? S May01 0:00 /usr/sbin/httpd
root 40539 0.0 0.5 11408 4704 ? Ss Apr23 0:15 /usr/sbin/httpd
daemon 5762 0.0 0.3 11540 3000 ? S May01 0:00 /usr/sbin/httpd
netscreen 7393 0.0 0.0 3080 712 pts/5 S+ 09:19 0:00 grep httpd
daemon 34413 0.0 0.3 11540 2992 ? S May01 0:00 /usr/sbin/httpd
root 40539 0.0 0.5 11408 4704 ? Ss Apr23 0:15 /usr/sbin/httpd
アラームをメール通知するシェルスクリプト
システム管理業務では、ログファイルを見てアラーム検知したときメール通知するシェルスクリプトをcronに登録することが多いです。
例) secureログでアラーム検知したら対象のログをメール通知するシェルスクリプト
#!/bin/bash
cat /var/log/secure | grep error | mail -s "secure error" hoge@hoge.com
通知メールのSubjectを日本語にしたい場合は、base64でエンコードした文字列を入れないと、一部のメーラ(BeckeyやOutlook)で文字化けします。
※余談
業務ではメールの宛先(
hoge@hoge.com)を監視担当者にするのか、システム管理者にするべきかでよく揉めます。
(自分の仕事を増やしたがる人は少くない(^^; )
最終更新:2011年05月18日 11:20