all

シェルスクリプト:MySQLでテーブルをリネームしてCSVに出力

シェルスクリプト 概要 [#o8bcfcc1] -対象のデータベースをバックアップ。 -対象テーブルを前月名でリネーム -リネームしたテーブルを/tmp配下にCSVで出力 -既存のテーブルのレコードを削除 シェルスクリプト内容 [#ob9084da] #!/bin/bash BEFOREMONTH=date +%m TODAYMONTH=date +%Y``expr ${BEFOREMONTH} - 1 #echo ${BEFOREMONTH} #echo ${TODAYMONTH} mysqldump -uユーザー名 -pパスワード データベース名 | gzip > /tmp/データベース名.dump.date +%Y%m%d.gz mysql -uユーザー名 -pパスワード データベース名 << EOF create table テーブル名_${TODAYMONTH} like テーブル名; insert into テーブル名_${TODAYMONTH} select * from テーブル名; delete from テーブル名; SELECT * INTO OUTFILE'/tmp/テーブル名_${TODAYMONTH}.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES STARTING BY '' TERMINATED BY '\r\n' FROM テーブル名_${TODAYMONTH}; EOF
One minute to read

シェルスクリプト:NTPD再起動してntpdate実行

シェルスクリプト 説明 [#sb74c7e9] ntpdが動いているのに何故か時刻が同期されていなかった。。 そんなときに簡易的に使用するためのスクリプトです。 スクリプト内容 [#s91c9c57] [準備] ntpdとntpdateをインストール済みで、ntpdが自動起動オンになっている場合。 /rootの直下にbinディレクトリを作成しておき、そこにntp-restart.shを作る。 #!/bin/bash /etc/init.d/ntpd stop if [ $? -eq 0 ]; then ntpdate ntp.jst.mfeed.ad.jp else killall ntpd ntpdate ntp.jst.mfeed.ad.jp fi /etc/init.d/ntpd start if [ $? -eq 0 ]; then echo date NTPD restart success. else echo date NTPD restart failed. fi ### ログローテーション ログに30日間残す。 30日経過したログファイルは.oldとする。 60日経過した.oldファイルは.old.1とし、次回スクリプト実行時に削除される。 if [ -e /root/bin/ntp-restart.log.old.1 ]; then rm /root/bin/ntp-restart.log.old.1 fi find /root/bin/ntp-restart.log -mtime +30 | xargs -i {} ntp-restart.
One minute to read

シェルスクリプト:Slackへの通知

シェルスクリプト スクリプト [#rde883de] #!/bin/bash if [ -n $? ];then echo "Usage: ./slack.sh IPaddress" exit 1; fi url='webhookのAPIで取得したURLをここに記載する。' username='ユーザー名として名乗る名称を記載する。なんでもOK' to="#チャンネル名を記載する" subject="hostname : $1" emoji=':bell:' <-絵文字。なんでもOK message="$2" payload="payload={ &#34;channel&#34;: &#34;${to}&#34;, &#34;username&#34;: &#34;${username}&#34;, &#34;text&#34;: &#34;${subject}&#34;, &#34;icon_emoji&#34;: &#34;${emoji}&#34;, &#34;attachments&#34;: [ { &#34;text&#34;: &#34;${message}&#34; } ] }" curl -m 5 –data-urlencode "${payload}" $url
One minute to read

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

シェルスクリプト Point:apacheを停止した後に、tomcatを再起動してapacheを起動する。 #!/bin/sh RESPGM=tomcat echo "$RESPGM restart program Start date +%Y/%m/%d/%H:%M:%S" /etc/init.d/httpd stop HTDPS=ps -ef |grep httpd|grep -v grep|wc -l if [ $HTDPS -eq 0 ] ; then /etc/init.d/$RESPGM stop sleep 5 /etc/init.d/$RESPGM start TOMPS=ps -ef |grep $RESPGM|grep -v grep|wc -l if [ $TOMPS -gt 0 ] ; then /etc/init.d/httpd start echo "$RESPGM restart program Successful!! date +%Y/%m/%d/%H:%M:%S" else echo "$RESPGM restart program Stop date +%Y/%m/%d/%H:%M:%S" fi else echo "A problem occured" echo "$RESPGM restart program Stop date +%Y/%m/%d/%H:%M:%S" fi
One minute to read

シェルスクリプト:zfsスナップショットをリモートサーバーへバックアップ

シェルスクリプト 説明 [#p862bee7] ローカルで作成したスナップショットをリモートに送信するシェルスクリプトです。 リモート上でデータが存在すると、データを受け取ることができないので一旦SSHでログインして削除しています。 データを先に削除する仕組みですので、ご自身の環境でご利用される場合はくれぐれもご注意ください。 内容 [#wb7d2dbc] #!/bin/bash ######################################################################### # [事前準備] # 1.バックアップサーバー上でSSHUSRのauthorised_keyに公開鍵を登録する # 2.バックアップサーバー上でvisudoを実行して、ユーザーを追加、/sbin/zfsを追加する # 3.ローカルとバックアップサーバー上のZFSディレクトリを確認しておく ######################################################################### export LANG=c ### Common vars #ZFSバックアップサーバー ZFSSVR=192.168.◯.◯ #ZFSバックアップサーバー上のファイルシステム ZFSSVRD=zfs1/$1 #SSH,SUDO実行ユーザー SSHUSR=zfsuser #ローカルのバックアップ対象のZFSファイルシステム ZFSD01=zfs1/$1 #スナップショット名 SNPNAME=snapshot01 #バックアップの際の送信先ファイルシステム振り分け用 YOUBI01=date +\%a #YOUBI01=Sun ### Backup Scripts ping -c 3 ${ZFSSVR} # バックアップサーバー上のバックアップデータの削除 /usr/bin/ssh -t ${SSHUSR}@${ZFSSVR} "sudo /sbin/zfs destroy ${ZFSSVRD}/${YOUBI01}@${SNPNAME}" # ローカル上でスナップショットの作成 /sbin/zfs snapshot ${ZFSD01}@${SNPNAME} # ローカルのスナップショットをバックアップサーバーへ送信 /sbin/zfs send ${ZFSD01}@${SNPNAME} | /usr/bin/ssh ${SSHUSR}@${ZFSSVR} sudo /sbin/zfs recv -F ${ZFSSVRD}/${YOUBI01} # ローカルのスナップショットの削除 /sbin/zfs destroy ${ZFSD01}@${SNPNAME}
One minute to read

シェルスクリプト:zfsローカルスナップショットバックアップ

シェルスクリプト 説明 [#h3681c35] zfsではスナップショットを取得してバックアップできます。 本来であれば下記シェルスクリプトに加えて、どこか別のバックアップサーバーへsendするようにした方が良いかと思われます。 既にデータが存在しているとスナップショットが取得できないため、削除しています。 YOUBIの変数を変えることで、複数世代の取得が可能ですが、下記内容では7世代分です。 内容 [#bada7749] #!/bin/bash ### ZFS snapshot local backup daily export LANG=c YOUBI01=date +\%a /sbin/zfs destroy 対象ディレクトリ@${YOUBI01} /sbin/zfs snapshot 対象ディレクトリ@${YOUBI01}
One minute to read

シェルスクリプト:ロードアベレージを毎日メールで配信

シェルスクリプト 概要 [#xceff827] サーバーのロードアベレージチェックをしたい場合に、Sysstatの結果をテキストで作成して、メールで添付したい場合に有効活用できます。 スクリプトの内容 [#q846ff10] “Execute below commands for this scripts"以下のコマンドを実行して、事前準備してください。 MAILADDRの変数の箇所に、送信先のメールアドレスを入力してください。 Windows向けに改行コードをCRからCRLFへ置換しています。 Macで確認する場合は「unix2dos」の行をコメントアウトするか、削除して下さい。 sarコマンドのオプションが「-q」になっていますが、そのオプションを変更することで別の負荷率を確認することが可能です。 #!/bin/bash # # "Execute below commands for this scripts" # # mkdir -p /root/bin/sysstat # cd /root/bin/ # vi mail-sysstat.sh # chmod u+x mail-sysstat.sh # yum install sysstat <– sar # vi /etc/sysconfig/sysstat # HISTORY=31 # yum install mailx <– mail # yum install unix2dos <– unix2dos # yum install sharutils <– uuenconde # crontab -e # 55 23 * * * /root/bin/mail-sysstat.
One minute to read

シェルスクリプト:ログ出力

シェルスクリプト シェルスクリプトの結果をログに出力する際のメモです。 個人的に現在(2015年12月時点)のベストプラクティス [#k782d17d] 下記記述をスクリプトの頭と末尾に記載しておくことで、スクリプトを実行した時間とスクリプトにかかった時間をログに記載できる SECONDS=0 LOGFILE="/tmp/backup-date +%w.log" exec > "${LOGFILE}" exec 2>&1 コマンド echo "[INFO] Script time is ${SECONDS}sec." とにかくシェルスクリプトの結果をログに吐き出す [#q8adb902] test.sh > test.log 2>&1 execコマンドを使ってログ出力する [#l471c327] LOGFILE="/tmp/backup-date +%w.log" exec >> "${LOGFILE}" exec 2>&1 コマンド 参考にさせていただいたURL:http://memo.laughk.org/2014/04/24/shell_exec_log.html まとめて囲う方法 [#l1738b50] #!/bin/sh LOG=result.log { date echo "Hello World" echo "Good Night" service httpd status } >> ${LOG} ヒアドキュメントを使って出力をまとめる [#b508eb98] #!/bin/sh LOG=test.log cat << EOF >> ${LOG} ==================== Program Start ==================== EOF POINT:EOFの箇所はなんでも良い。
One minute to read

シェルスクリプト:一定のプロセス数を超えたらサービス再起動

シェルスクリプト #!/bin/sh export LANG=c PROCESS=httpd PROCESS_COUNT=100 LOG=/var/log/psrestart.log DATE=date &#39;+%Y/%m/%d %k:%M:%S&#39; # log file if [-e $LOG ]; then echo "$LOG" else touch $LOG fi # process check AliveProces=ps -ef | grep $PROCESS | grep -v grep | wc -l echo $DATE number of $PROCESS processes ==$AliveProces== >> $LOG if [ "$AliveProces" -ge $PROCESS_COUNT ] then echo $DATE Start $PROCESS restart >> $LOG service $PROCESS restart echo $DATE End $PROCESS restart >> $LOG else echo "no restart" fi
One minute to read

シェルスクリプト:今日の日付によって月の第何週目かを表示させる

シェルスクリプト 概要 [#c0630150] dateコマンドにはその年の最初から第何週目かを表示させるオプションはありますが、その月で何週目かを表示させるオプションはありません。※見当たりませんでした。 そこでcaseによるシェルスクリプトで第何週目かを表示させることで、変数として使用できるのではと作成してみました。 シェルスクリプト [#sf2137dd] #!/bin/bash DATE00=date +%d 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 echo ${DATE01} 説明 [#mf1bccb5] DATE01が表示させる結果です。 配列のパターンとして下記を条件として表示させてますので、該当箇所を修正することで別のパターンも作成可能です。 01-07 or 1-7 ==> _01 08-14 or 8or9 ==> _02 15-21 ==> _03 22-28 ==> _04 29-31 ==> _05 echo ${DATE01}
One minute to read