シェルスクリプトで案件クローズの自動化
はじめに
案件クローズの際に自動化して間違いの無い作業を目的としました
本投稿で扱う内容
・シェルスクリプトの多段配列、外部ファイル読み込み、各種コマンド実行
・前述のコードによるリモートのバックアップとサービス停止
実行フロー
1. 外部ファイルに対象ホストのIPアドレスとニックネーム(ファイル保存用)を定義
2. 1を読み込む
3. ssh経由で各ホスト上でバックアップファイル作成
4. 3を受信
5. 再圧縮等調整
6. 各ホスト上のサービス停止
2. 1を読み込む
3. ssh経由で各ホスト上でバックアップファイル作成
4. 3を受信
5. 再圧縮等調整
6. 各ホスト上のサービス停止
実コード
コード上にコメントとして説明を付けたので詳細は割愛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #!/bin/bash ## 本番モード(サービス停止)のフラグ _flag=${1:""} declare -A _hosts declare -A _host ## ホスト群定義読み込み(IPと名称は半角スペース区切り) while read line do ## パースして変数代入 ip=$(echo ${line} | cut -d' ' -f1) name=$(echo ${line} | cut -d' ' -f2) _host=([ip]=$ip [name]=$name) _hosts+=$_host done < ./host_list _services=("mysqld postfix vsftpd httpd") for _index in ${!_hosts[@]} do host=${_hosts[$_index]} host_name=${_host[name]} host_ip=${_host[ip]} dirname=${host_name}_`date +%y%m%d` mkdir -p ./${dirname} # DBバックアップ実施@remote ssh root@${host_ip} "mysqldump -u root -p DatabaseName" # リソース圧縮@remote ssh root@${host_ip} "tar zcvf /tmp/src.tar.gz /var/www/html/WebSite --exclude app/cache/prod --exclude app/cache/dev --exclude app/logs/\*.log\*" # DBアーカイブ受信 (最新のもののみ) scp -rC root@${host_ip}:/var/backup/mysql/`ssh ${host_ip} "ls -ltr /var/backup/mysql | tail -n 1 | rev | cut -d' ' -f1 | rev"` ./${dirname}/DB.sql.gz # リソースアーカイブ受信 scp -rC root@${host_ip}:/tmp/src.tar.gz ./${dirname}/src.tar.gz # DBアーカイブの再圧縮 gzip -d ./${dirname}/DB.sql.gz tar zcvf ./${dirname}/DB.tar.gz ./${dirname}/DB.sql rm -f ./${dirname}/DB.sql ## 本番モードの時のみ各種サービスの停止 if [ $_flag = '-release' ]; then for _srv in ${_services[@]} do ssh root@${host_ip} "service ${_srv} stop" done ssh root@${host_ip} "sed -i -e "/^(?!#)/d" /etc/crontab" fi done |
Author Profile
スターフィールド編集部
SHARE