あけましておめでとうございます!!
Adachinです。
今年初のブログです!
(⌍་д་⌌)「二週間何してたの??」
書く時間がありませんでした(言い訳乙)
というわけで、今回はシェルスクリプトのお話。
目的としてはリモート先のファイルを毎時確認したいからどうすればいいか作ってみた。
■流れ
①if,else文でファイルがない場合はslackとメールに飛ばす
②ある場合は特に何もしない
とりあえず、リモート先のファイルを確認ってどうやるのか本などで調べてみた。
■if文
|
1 |
if [[ `ssh adachin@server "ls $test"` != "$test" ]]; then |
-f 関数がリモートでエラー吐きまくったのでこんなかんじにしてみた。
[ ]の内側は必ず半角スペースを入れることに注意しましょう。
■例文
例えばlsyncdでコンテンツファイルを各サーバに同期させる場合、
ちゃんと同期しているのかを確認するスクリプトを紹介します(・∀・)
というわけでこんな感じで作ってみました。
| #!/bin/bash | |
| #変数(testファイル/一時間前のtestファイル) | |
| TEST=/hoge/test.txt.`date "+%Y%m%d-%H%M"` | |
| TESTRM=/hoge | |
| #一日前のtestファイルを削除 | |
| ssh -q adachin@lsyncd sudo -u adachin find $TESTRM -mtime +0 -exec rm -f {} \; | |
| echo `date "+%Y-%m-%d %T"` | |
| #testファイルをtouch | |
| ssh -q adachin@lsyncd sudo -u adachin touch $TEST | |
| sleep 10s | |
| #for文でserver1~20までtestファイルがあるのか確認 | |
| for x in `seq 1 20`; do | |
| echo "server$x" | |
| if [[ `ssh adachin@server$x "ls $TEST"` != "$TEST" ]]; then | |
| echo "Not a test file!" | |
| #slackとメールに飛ばす | |
| echo Not a test file | ./webhooks.sh | |
| echo "server$x not a touch file" | mail -s "server$x not touch file" adachin@adachin.com | |
| else | |
| echo "test file OK" | |
| fi | |
| done | |
| #cronで毎時15分に確認 | |
| 15 * * * * check_touch.sh |
■まとめ
自動化した時の快感は半端無かった・・・
他にやり方などあったらコメントお願いします!!!
来週からAWSでサーバ構築をするのでそこらへんもあとでブログします。
0件のコメント