*最小限のデプロイ [#t843847e] **日付を得る [#m3e9d431] `date '+%Y%m%d'` ***前日日付を得る [#cbbe2912] **指定したフォルダから本日以降更新があったファイルを得る [#x82599a5] **前日更新日分のファイルのみ検索及びコピーをする [#e406f953] find /var/log -daystart -mtime 1 -exec cp {} /var/move/ \\; ***1時間半前に修正したファイルのみ出力 [#h0dfca32] find /Applications/play-1.2.4/ozaka -atime -30m -type f ! -path "*.svn*" ***3時間以内に修正したファイル一覧 [#gf0a5a6c] find /Applications/play-1.2.4/ozaka -mmin -180 -type f ! -path "*.svn*" **シェルスクリプトでn日前の日付を取得する [#cc85eae4] http://ameblo.jp/sasaki0000/entry-10036208746.html **findコマンドのよくある使い方 [#b7623087] http://c-brains.jp/blog/wsg/10/04/09-095214.php *ファイルパスからファイル名や拡張子を自由に取り出す [#odfde752] 紹介URL http://d.hatena.ne.jp/zariganitosh/20100921/get_file_name_ext_dir **例 [#d8890672] fpath='/a/b/c.d.e' **ファイル名を取り出す(拡張子あり) [#u555fbf2] fname_ext="${fpath##*/}" echo $fname_ext ***結果 [#t6eb93d9] c.d.e **ファイル名を取り出す(拡張子なし) [#f9d3a850] fname="${fname_ext%.*}" echo $fname ***結果 [#p8923506] c.d **拡張子を取り出す [#u263e144] fext="${fpath##*.}" echo $fext ***結果 [#c4bab320] e **ディレクトリを取り出す [#od8742b3] fdir="${fpath%/*}" echo $fdir ***結果 [#df73d66d] /a/b *補足 [#bd24620e] ${変数#パターン} 先頭から最短一致した部分を取り除く ${変数##パターン} 先頭から最長一致した部分を取り除く ${変数%パターン} 末尾から最短一致した部分を取り除く ${変数%%パターン} 末尾から最長一致した部分を取り除く //////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////// **作業フォルダ作成 [#bbf01232] mkdir zzzz **2時間以内に修正されたフォルダをコピーする(coreutils)が必要 [#q12bfa31] find /Applications/play-1.2.4/ozaka -mmin -120 -type f ! -path "*.svn*" -exec gcp -p --parents {} ./zzzz/ \; ***$before分以内に変更があったファイル一覧 [#z7a5dd61] function findnew() { find . -mmin -$1 -type f ! -regex ".*svn.*" ! -regex ".*zip" ! -regex ".*class" ! -regex ".*/tmp/.*" ! -path "*server.pid" } findnew 10 ***オプション例 [#nc606594] http://uguisu.skr.jp/Windows/find_xargs.html ***作業フォルダに$beforeぷん以内に修正のあったファイルを格納する [#w1b6b63b] #ファイルを抽出します。 #//////////////////////////////////////////////// #findnewz 30 新しいファイル #//////////////////////////////////////////////// function findnewz() { before=$1 dupdir=zzzz appdir=ozaka initval cd /Applications/play-1.2.4/$appdir rm -r -f ../$dupdir mkdir ../$dupdir echo "更新されたファイルを集計中" find . -mmin -$before -type f ! -path "*.svn*" ! -regex ".*zip" ! -regex ".*class" ! -regex ".*/tmp/.*" ! -path "*server.pid" -exec gcp -p --parents {} ../$dupdir/ \; cd ../$dupdir echo "圧縮中" zip -q -r $dupdir . mv $dupdir.zip ../ cd .. mv $dupdir.zip $appdir.zip echo "各サーバに転送中" send $appdir.zip echo "転送完了" } #30分以内に変更があったファイルを転送します。 findnewz 30 #cd $playdir #appdir=ozaka #scp -i $pem $appdir.zip $web01: #scp -i $pem $appdir.zip $web02: #rm $appdir.zip function initval(){ pc04=program4@192.168.1.100 web01=root@175.184.35.78 web02=root@175.184.34.47 } function send(){ initval echo $web01 scp -i $pem $1 $web01: echo $web02 scp -i $pem $1 $web02: echo $pc04 scp $1 $pc04: } send aa.txt #///////////////////////////////// #// expect化はだいたい動いてから #///////////////////////////////// #sshでログインして展開、コピー、後始末なexpect作成中だがまだだからとばす。 function findnewzp() { expect -c " set timeout -1 spawn ssh root@175.184.35.78 expect \"root@OzakaWebDev01 \" send \"unpackCode\n\" expect \"root@OzakaWebDev01 \" send \"exit\n\" expect \"program3\" spawn ssh root@175.184.34.47 expect \"root@OzakaWebDev02 \" send \"unpackCode\n\" expect \"root@OzakaWebDev02 \" send \"exit\n\" expect \"program3\" spawn ssh program4@192.168.1.100 expect -re \"program4:. program4.\" send \"unpackCode\n\" expect -re \"program4:. program4.\" send \"exit\n\" exit " } #////////////////// # 確認中 #///////////////// function unpacks() { expect -c " set timeout -1 spawn ssh program4@192.168.1.100 expect -re \"program4:. program4.\" send \"unpackCode\n\" expect -re \"program4:. program4.\" send \"exit\n\" exit " } unpacks #////////////////// # 確認中 #///////////////// function unpacks() { expect -c " set timeout -1 spawn ssh root@175.184.35.78 expect \"root@OzakaWebDev01 \" send \"unpackCode\n\" expect \"root@OzakaWebDev01 \" send \"exit\n\" expect \"program3\" exit " } unpacks #////////////////////////////////// #$pc04には上げなくてもなんとかなる。サーバ編集目的だから ssh $pc04 #////////////////////////////////// #$pc04にログイン後 #////////////////////////////////// #////////////////////////////////// #unpackCode #////////////////////////////////// function unpackCode() { dupdir=zzzz appdir=ozaka mergedir=/Users/program4/play/ozaka cd ~ rm -r -f $dupdir mkdir $dupdir mv $appdir.zip $dupdir/ cd $dupdir unzip -q -o $appdir.zip rm -f $appdir.zip echo "ファイルのマージをしています。" find . -type f ! -path "*server.pid" | while read f; do echo $f mkdir -p $mergedir/${f%/*} cp -a $f $mergedir/${f%/*} done echo "ok" cd .. rrestart.sh echo "pc04はマージ完了" } unpackCode exit #//////////////////////////////////////////////// #ここからweb01 #//////////////////////////////////////////////// ssh $web01 #ログイン #functionは .bash_profileに格納済みです。 #//////////////////////////////////////////////// #unpackCode #//////////////////////////////////////////////// function unpackCode() { dupdir=zzzz appdir=ozaka mergedir=/usr/local/play-1.2.4/ozaka cd ~ rm -r -f $dupdir mkdir $dupdir mv $appdir.zip $dupdir/ cd $dupdir unzip -q -o $appdir.zip rm -f $appdir.zip echo "ファイルのマージをしています。" find . -type f ! -path "*server.pid" | while read f; do echo $f mkdir -p $mergedir/${f%/*} /bin/cp -f $f $mergedir/${f%/*} done echo "ok" cd .. rm -r -f $dupdir } unpackCode #functionは .bash_profileに格納済みです。 #//////////////////////////////////////////////// #rrestart #//////////////////////////////////////////////// function rrestart() { appdir=ozaka cd /usr/local/play-1.2.4 play stop $appdir ps -ef | grep play.jar | grep -v grep | awk '{print $2}' | xargs kill ps -ef | grep ozaka | grep -v grep | awk '{print $2}' | xargs kill rm -f /usr/local/play-1.2.4/ozaka/server.pid play start $appdir return 0 } rrestart #================================================== *参考になりそうなコード [#r4adaa24] #!/usr/bin/expect set timeout 5 spawn ssh program4@192.168.1.100 expect "program4:~ program4$ " send "./deployscripts/step2.sh;exit\n" interact *参考になりそうなコード [#f9232d8d] cd $dupdir zip -q -r $dupdir . mv $dupdir.zip ../ cd .. mv $dupdir.zip ozaka.zip *参考になりそうな転送用コード [#r531e20d] scp -i ~/Downloads/hacozaka_private.pem /Applications/play-1.2.4/ozaka.zip root@175.184.35.78: scp -i ~/Downloads/hacozaka_private.pem /Applications/play-1.2.4/ozaka.zip root@175.184.34.47: rm -f /Applications/play-1.2.4/ozaka.zip say 共有サーバに転送中です。 -v Kyoko echo '共有サーバに送る' pc04=program4@192.168.1.100 scp ozaka.zip $pc04: say 共有サーバにログインしました echo "■ダウンロードしたzipファイルでozakaを置き換える" echo "./deployscripts/step2.sh " echo $pc04 ./deployscripts/login4.except say 共有サーバのデプロイが完了しました。 -v Kyoko say ニフティクラウドに転送中 ./deployscripts/step3.sh say 転送が完了しました。 *参考になりそうなニフティサーバ展開コード [#jd71e9d5] cd /usr/local/play-1.2.4 play stop ozaka ps -ef | grep play.jar | grep -v grep | awk '{print $2}' | xargs kill ps -ef | grep ozaka | grep -v grep | awk '{print $2}' | xargs kill rm -f /usr/local/play-1.2.4/ozaka/server.pid rm -f -r ozaka_dup rm -f -r ozaka mkdir ozaka cd ozaka mv ~/ozaka.zip . unzip -q -o ozaka.zip rm -f ozaka.zip cd .. #設定ファイルをローカル環境用からニフティ用に切り替える rm -f ozaka/conf/application.conf mv ozaka/conf/application.nifty.conf ozaka/conf/application.conf #これだけやれば再起動 play stop ozaka ps -ef | grep play.jar | grep -v grep | awk '{print $2}' | xargs kill ps -ef | grep ozaka | grep -v grep | awk '{print $2}' | xargs kill rm -f /usr/local/play-1.2.4/ozaka/server.pid play clean ozaka play start ozaka ~