all

シェルスクリプト

#author(“2018-02-06T03:32:23+00:00”,“default:kazuma”,“kazuma”) トップページ 基本 [#p3242184] -スクリプトの実行 -for文まとめ -case文まとめ -if文まとめ -while文まとめ -read分まとめ -引数チェック -bashで配列処理する際のまとめ -シェルスクリプトでオプション作成 応用 [#d6af1f3e] -シャットダウン時にシェルスクリプトを実行させる設定 -リモートでコマンドを実行して、その結果をローカルに表示させる -スペース区切りで改行させる -汎用的なマウントチェックif文 参考スクリプト例 [#m29e8585] -シェルスクリプト:expectでSSH自動ログイン -シェルスクリプト:一定のプロセス数を超えたらサービス再起動 -シェルスクリプト:Apacheの再起動 -シェルスクリプト:tomcatとApacheの再起動 -シェルスクリプト:Apacheが停止してたら起動 -シェルスクリプト:ロードアベレージを毎日メールで配信 -シェルスクリプト:KVMゲストOSのVNCディスプレイを一括で表示させる -シェルスクリプト:今日の日付によって月の第何週目かを表示させる -シェルスクリプト:ログ出力 OS関連 [#s533729c] -シェルスクリプト:NTPD再起動してntpdate実行 ネットワーク関連 [#td31ee87] -シェルスクリプト:特定のIPアドレス範囲に対してpingで疎通確認 MySQL関連 [#p44e8f93] -シェルスクリプト:mysqldumpバックアップ -シェルスクリプト:MySQLでテーブルをリネームしてCSVに出力 -シェルスクリプト:MySQLでmod_log_sqlで使用されるテーブルをリネーム メール関連 [#r9897bcc] -Postfixでmailqにたまってしまったメールの削除 ZFS関連 [#tbf5dbc0] -シェルスクリプト:zfsローカルスナップショットバックアップ -シェルスクリプト:zfsスナップショットをリモートサーバーへバックアップ ファイル関連 [#db5eebc3] -シェルスクリプト:FTPのダウンロードを自動化 その他 [#uf3044a9] -シェルスクリプト:Slackへの通知
One minute to read

シェルスクリプト:Apacheが停止してたら起動

シェルスクリプト あまり無いかもしれませんが、Apacheなどのプロセスが落ちていたら自動的に起動させるためのスクリプトです。 特にポイントらしいポイントも無く、単純にプロセス数をチェックして、プロセスが0ならサービスをスタートさせます。 反対にプロセスが0でなければ、既に起動していることをログにメッセージで吐き出して終了です。 #!/bin/sh SERVICE=httpd LOG=/var/log/service-start.log RESULT=ps aux |grep httpd |grep -v "grep"| wc -l echo "==== date +%Y/%m/%d/%H:%M ====" >> $LOG if [ $RESULT -eq 0 ] ; then echo "$SERVICE stopped now , Try $SERVICE service start!" >> $LOG /etc/init.d/$SERVICE start >> $LOG else echo "Service $SERVICE is alleady Starting" >> $LOG fi
One minute to read

シェルスクリプト:Apacheの再起動

シェルスクリプト 説明 [#sb5e128d] 最初にapacheを停止させて、もしもプロセスが残っていたらkillallで強制終了します。 その後でapacheを起動させます。 もし失敗したら、再度Apacheを起動させるためのserviceコマンドを実行します。 スクリプト [#b49df78e] #!/bin/bash /etc/init.d/httpd stop sleep 2 PSNUM=ps aux | grep httpd | wc -l if [ ${PSNUM} -gt 1 ];then killall httpd ;fi sleep 2 /etc/init.d/httpd start if [ $? -eq 0 ];then echo "Apache restart OK";else service httpd start;exit 9;fi
One minute to read

シェルスクリプト:expectでSSH自動ログイン

シェルスクリプト 概要 [#kb8cef1d] よくある手法ですが、公開鍵認証方式ではなく、SSHで自動ログインする方法です。 スクリプト内容 [#k1f8984e] 事前にexpectをインストールしておいてください。 #!/bin/bash # expect コマンドを実行 expect -c " # タイムアウト値の指定 set timeout 20 # spawnで新しいジョブ生成 spawn ssh ユーザー名@IPアドレス # login expect password: send "パスワード\n" # spawnジョブを通常の通信にする interact "
One minute to read

シェルスクリプト:FTPのダウンロードを自動化

シェルスクリプト 説明 [#kb40900c] wgetコマンドにて、FTPセッションを使用して、ファイルのダウンロードを実行するシェルスクリプトです。 スクリプト [#fd1622cc] #!/bin/bash echo -n "FTP Server Name:" read FTPSVRNAME if [ ! -n "${FTPSVRNAME}" ];then echo "Plase Type FTP Server Name.";exit;fi echo -n "FTP User Name:" read FTPUSRNAME if [ ! -n "${FTPUSRNAME}" ];then echo "Plase Type FTP Server Name.";exit;fi echo -n "FTP User Pass:" read FTPUSRPASS if [ ! -n "${FTPUSRPASS}" ];then echo "Plase Type FTP Server Name.";exit;fi echo -n "Download Server Path:" read DLSVRPATH wget -N -r –output-file=.
One minute to read

シェルスクリプト:KVMゲストOSのVNCディスプレイを一括で表示させる

シェルスクリプト #!/bin/sh GUESTNAME=virsh list |grep -v "Id"| sed -e 's/----------------------------------------------------//'|cut -c5-|sed -e 's/実行中//' echo " " echo " HostName VNC Display Number" echo "—————————————–" for i in $GUESTNAME do VNC=virsh vncdisplay $i echo -e "$i\t\t$VNC" done echo " " 結果表示 [#s756416d] HostName VNC Display Number —————————————– VM01 :0 VM02 :1 VM03 :2 VM04 :3
One minute to read

シェルスクリプト:mysqldumpバックアップ

シェルスクリプト 簡易バックアップ [#u3ad7b7b] ファイルサーバーのマウントチェックをしてmysqldumpを実施 #!/bin/bash FILESVR=/mnt/backup if [ -e $FILESVR ] ; then mysqldump -uユーザー -pパスワード –events -x –all-databases | gzip > /mnt/backup/database/mysqldump.date +%w.sql.gz else echo date +%Y/%m/%d/%H:%M" Mysqldump backup failed ">> /var/log/backup.log fi リモート先へSSHでコピーしながらdumpをバックアップ [#b76f1ba5] mysqldump -u DBユーザー -pパスワード データベース名 | gzip | ssh SSHユーザー@リモートサーバー 'cat > バックアップ先ディレクトリ/mysqldump.date +%w.sql.gz'
One minute to read

シェルスクリプト:MySQLでmod_log_sqlで使用されるテーブルをリネーム

シェルスクリプト 概要 [#x05328ba] apacheのmod_log_sqlを使用して、MySQLサーバーでログを管理している場合に、テーブルを一週間に一度リネームするシェルスクリプトです。 また、6ヶ月前のテーブルを削除します。 DATE03と04の-6monthの箇所を変更することで、期間を変更できます。 スクリプト実行日がその月の第何週かをcaseで取得してます。 mysqlのクエリ発行については特にエラー処理してませんが、存在しないテーブルであれば存在しないので削除しないで次のクエリへつながっていくので、特に問題ありません。 対象のデータベースはfor文でまわしているので、DB01にスペース区切りで羅列することで複数データベースを対象とすることもできます。 今回はaccess_logがテーブル名ですが、リネームしてもあとから自動的に作成されるような仕組みのテーブルであればこのスクリプトが使用可能です。 ※mod_log_sqlの場合、テーブルが存在しないと、アクセスした際に自動的に作成してくれる。 内容 [#h44c82ce] 下記をcrontabへ登録。時間は変更しても問題無し。またシェルスクリプトの場所は任意の場所で。 10 0 3,8,15,22,29 * * /root/delapachelog.sh #!/bin/bash ##### Weekly var DATE00=date +%d #DATE00=8 case ${DATE00} in [0][1-7]|[1-7] ) DATE01=_01 ;; [0][8-9]|[8]|[9]|[1][0-4] ) DATE01=_02 ;; [1][5-9]|[2][0-1] ) DATE01=03 ;; [2][2-8] ) DATE01=04 ;; [2][9]|[3][0-1] ) DATE01=05 ;; esac ###### Date Var DATE02=date +%Y%m | cut -c3-${DATE01} DATE03=date +%Y%m --date '-6 month' | cut -c3-${DATE01} DATE04=date +%Y%m --date '-6 month' | cut -c3- ##### DataBase Var #DB01="test01 test02 test03" DB01="データベース01 データベース02 データベース03" SQL01="rename table access_log to access_log${DATE02};" SQL02="drop table access_log${DATE03};" SQL03="drop table access_log${DATE04};" ###### Rename table & drop table 6 month ago for ARG01 in ${DB01} do mysql -u root -pパスワード ${ARG01} -e "${SQL01}" mysql -u root -pパスワード ${ARG01} -e "${SQL02}" mysql -u root -pパスワード ${ARG01} -e "${SQL03}" done
One minute to read