#!/bin/sh #--サーバ連続稼働時間と過去の最長稼働時間をhtml上に表示するシェルスクリプト uptime.sh-- 2015.03.14 #---------------------------------------------------------------------------------------------------------------------------------------------------- #01:12:34 up 28 min, 1 users, load average: 0.00, 0.00, 0.15 …1時間未満のとき #02:34:56 up 2:25, 1 users, load average: 0.00, 0.15, 0.05 …1時間以上1日未満のとき #03:15:51 up 23 days, 3 min, 1 users, load average: 0.15, 0.05, 0.00 …1日+1時間未満以上のとき #03:45:55 up 23 days, 4:35, 1 users, load average: 0.15, 0.05, 0.00 …1日+1時間以上のとき #上記をuptime実行結果の例とします. #cronを使って,/hoge/hoge/uptime.sh /hogehoge/hoge.html のように定期的に実行すると,hoge.html中の #で囲まれた部分にサーバ連続稼働時間, #で囲まれた部分に過去の最長連続稼働時間を表示します. #このスクリプトは,指定ディレクトリ内に"uptime_MAX.txt"を自動生成します. #---------------------------------------------------------------------------------------------------------------------------------------------------- ################################################################ FILE=/usr/uptime/uptime_MAX.txt #環境に合わせて設定してください ################################################################ echo 0 0 0 >>${FILE} #uptime_MAX.txtが存在しなければ作成して0 0 0を記入,あれば0 0 0を末尾に追記 CHK=`uptime | awk '{print $4}'` #uptime実行結果の第4パラメータを変数CHKに代入 結果:CHK=[min,], [days,] or others if test ${CHK} = "days," #変数CHK=days,のとき then CHK=`uptime | awk '{print $6}'` #uptime実行結果の第6パラメータを変数CHKに代入 結果:CHK=[min,] or others if test ${CHK} = "min," #変数CHK=min,のとき then DAY=`uptime | awk '{print $3}'` #uptime実行結果の第3パラメータを変数DAYに代入 HOUR=0 #変数HOURに0を代入 MINUTE=`uptime | awk '{print $5}' | sed -e 's/.*:\(.*[^,]\),.*/\1/'` #uptime実行結果の第5パラメータのうち,00:00のような部分の:より後を変数MINUTEに代入(,は除去する) else DAY=`uptime | awk '{print $3}'` #uptime実行結果の第3パラメータを変数DAYに代入 HOUR=`uptime | awk '{print $5}' | sed -e 's/\(.*\):.*/\1/'` #uptime実行結果の第5パラメータのうち,00:00のような部分の:より前を変数HOURに代入 MINUTE=`uptime | awk '{print $5}' | sed -e 's/.*:\(.*\),.*/\1/'` #uptime実行結果の第5パラメータのうち,00:00のような部分の:より後を変数MINUTEに代入 fi elif test ${CHK} = "min," #変数CHK=min,のとき then DAY=0 #変数DAYに0を代入 HOUR=0 #変数HOURに0を代入 MINUTE=`uptime | awk '{print $3}'` #uptime実行結果の第3パラメータを変数MINUTEに代入 else DAY=0 #変数DAYに0を代入 HOUR=`uptime | awk '{print $3}' | sed -e 's/\(.*[^,]\):.*/\1/'` #uptime実行結果の第3パラメータのうち,00:00のような部分の:より前を変数HOURに代入(,は除去する) MINUTE=`uptime | awk '{print $3}' | sed -e 's/.*:\(.*[^,]\),.*/\1/'` #uptime実行結果の第3パラメータのうち,00:00のような部分の:より後を変数MINUTEに代入(,は除去する) fi COUNT_SUM=`expr ${DAY} \* 1440 + ${HOUR} \* 60 + ${MINUTE}` #uptimeを分に換算して変数COUNT_SUMに代入 DAY_MAX=`head -n 1 ${FILE} | awk '{print $1}'` #uptime_MAX.txtの第1行を取得し,第1パラメータを変数DAY_MAXに代入 HOUR_MAX=`head -n 1 ${FILE} | awk '{print $2}'` #uptime_MAX.txtの第1行を取得し,第2パラメータを変数HOUR_MAXに代入 MINUTE_MAX=`head -n 1 ${FILE} | awk '{print $3}'` #uptime_MAX.txtの第1行を取得し,第3パラメータを変数MINUTE_MAXに代入 COUNT_MAX=${DAY_MAX}" "${HOUR_MAX}" "${MINUTE_MAX} #変数DAY_MAX,HOUR_MAX,MINUTE_MAXをスペース区切りにして変数COUNT_MAXに代入 COUNT_MAX_SUM=`expr ${DAY_MAX} \* 1440 + ${HOUR_MAX} \* 60 + ${MINUTE_MAX}` #uptime_MAXを分に換算して変数COUNT_MAX_SUMに代入 if test ${COUNT_SUM} -ge ${COUNT_MAX_SUM} #最長記録の更新を確認 then COUNT_MAX=${DAY}" "${HOUR}" "${MINUTE} #変数DAY,HOUR,MINUTEをスペース区切りにして変数COUNT_MAXに代入 echo $COUNT_MAX >${FILE} #uptime_MAX.txtの内容を変数COUNT_MAXの内容で上書き DAY_MAX=`head -n 1 ${FILE} | awk '{print $1}'` #uptime_MAX.txtの第1行を取得し,第1パラメータを変数DAY_MAXに代入 HOUR_MAX=`head -n 1 ${FILE} | awk '{print $2}'` #uptime_MAX.txtの第1行を取得し,第2パラメータを変数HOUR_MAXに代入 MINUTE_MAX=`head -n 1 ${FILE} | awk '{print $3}'` #uptime_MAX.txtの第1行を取得し,第3パラメータを変数MINUTE_MAXに代入 else echo $COUNT_MAX >${FILE} #uptime_MAX.txtの内容を変数COUNT_MAXの内容で上書き(uptime_MAX.txtに無限に0 0 0が追記されるのを防ぐ) fi sed -e "s/<\!-. uptime .->..*<\!-. uptime_end .->/<\!-- uptime -->${DAY}d ${HOUR}h ${MINUTE}m<\!-- uptime_end -->/" $1 > $1.tmp #スクリプト実行時に渡された第1パラメータ(/hogehoge/hoge.html)中ので囲まれた範囲の中を書き換えたものをhoge.html.tmpに出力 rm -rf $1 #hoge.htmlを消去 mv $1.tmp $1 #hoge.html.tmpをhoge.htmlにリネーム sed -e "s/<\!-. uptime_MAX .->..*<\!-. uptime_MAX_end .->/<\!-- uptime_MAX -->${DAY_MAX}d ${HOUR_MAX}h ${MINUTE_MAX}m<\!-- uptime_MAX_end -->/" $1 > $1.tmp #スクリプト実行時に渡された第1パラメータ(/hogehoge/hoge.html)中ので囲まれた範囲を書き換えたものをhoge.html.tmpに出力 rm -rf $1 #hoge.htmlを消去 mv $1.tmp $1 #hoge.html.tmpをhoge.htmlにリネーム