4月8日にさくらのナレッジで、「シェルスクリプトでバックアップのすすめ~初心者でもよくわかる!VPSによるWebサーバー運用講座(5)」、という記事が公開されました。内容は、cronとシェルスクリプトを使って、CMSをはじめとした各種Webサイトを、バックアップするためのスクリプトとその解説です。
いきなり読むのは難しかった…
個人的に、このブログ以外にもWordPressとFuelPHPで構築した、Webサイトの開発をしています。WordPressだけであれば、プラグインのBackWPupを使えば済む話ですが、PHPフレームワークのFuelPHPでは、もちろんWordPressのプラグインは使えません。
「何らかの方法でバックアップをせんとあかんなー」と思っていたところに、さくらのナレッジで記事が公開されました。渡りに船とばかりに読み込みましたが、やはり難しい…。ドットインストールでシェルスクリプト入門 (全18回)というレッスンがあり何度も視聴しましたが、初心者の自分がすべての内容を理解するのは無理がありました。
分からないので分からないところを明らかにする
といってボヤいても前に進まないので、具体的に何が分からないのかまとめてみました。分からないところは、全部で15箇所あります。大きく以下の3つに分けられます。
- シェルスクリプト本体の部分
- そのスクリプトを実行するためのコマンド
- その他
ちなみに、保存元のサーバーは「さくらのVPS」を、保存先のサーバーは「さくらのレンタルサーバー」を想定しています。
シェルスクリプト本体の部分で分からないところ
1.”STATUS”の意味
STATUS=0
初期値は”0″で正常であることを示し、エラーが発生するたびに”1″として、「異常」で処理を終了させるために存在しているシェル変数のことでしょうか?
また、大文字にしているのはなぜでしょうか?(ぐぐって調べたページでは小文字が使用されています)
ぐぐって調べたページ
http://echoes.jp/saito/csh.html
http://shellscript.sunone.me/exit_status.html
2.evalコマンドの使用について
eval "scp -i /root/.ssh/id_rsa $1 vpsuser@IPアドレス:~/$2"
を
`scp -i /root/.ssh/id_rsa $1 vpsuser@IPアドレス:~/$2`
のように、コマンドを実行するためのバッククオーテーションの中で使用しないのは、$1と$2を変数展開するためでしょうか?
3.evalコマンドの引数について
eval "scp -i /root/.ssh/id_rsa $1 vpsuser@IPアドレス:~/$2"
evalコマンド内にある、$1や$2は第一引数、第二引数のことを示すのか?$1と$2について、具体的な例として、どんなパス名が考えられますか?
ぐぐって調べたページ
http://goo.gl/3mvXps
4.for文の繰り返しの意味
for file in `ls -1t ${1}*`
とは、更新日付が新しい順にファイルをすべてリストアップ → そのファイルを変数fileに入れて、fileの数だけ繰り返しを行うという意味でしょうか?
5.変数の波括弧について
${1} ${file} ${CNT}
これらの変数はなぜ
$1 $file $CNT
にならないのでしょうか?
ぐぐって調べたページ
http://echoes.jp/saito/csh.html
6.条件式を評価するためのコマンド
if [ ${CNT} -le 10 ]
は、
if [ test ${CNT} -le 10 ]
と同じでしょうか?testコマンドは省略できるのでしょうか?
7.丸括弧の使い方について
CNT=$((CNT+1))
右辺で丸括弧を2回使う意味と、記号の$を使う意味が分かりません。
8.mysqldumpコマンドのオプションについて
"mysqldump -u root -ppassword データベース名 |gzip -c"
のうち、”-c”は何を意味しているのか?
9.deletefile関数の使い方
deletefile "/backup/wordpressfile_"
なぜ引数に””(ダブルクオーテーション)を使うのでしょうか?アンダーバーを使っても良いと思いますが、本文と内容を合わせるためには、ハイフンを使うべきではないでしょうか?
また、アンダーバーもしくはハイフンのところで記述が止まっているのは、後ろにyyyymmdd_HHMM.tar.gz を表す関数内でアスタリスクが使われているためでしょうか?
10.変数の波括弧について
${STATUS} ${SUBJECT}
は、なぜ
$STATUS $SUBJECT
とならずに波括弧をつけるのでしょうか?
11.変数の大文字について
${STATUS} ${SUBJECT}
は、なぜ大文字にしているのでしょうか?
12.シェルスクリプトの終了について
"exit ${STATUS}"
とは正常終了した場合の”exit 0″のことを指すのか?
シェルスクリプトを実行させるコマンドで分からないところ
13.シェルスクリプト実行時のエラー
/usr/local/bin/cmsbackup.sh
のコマンドを実行したらいろいろとエラーが出ます。エラー内容は以下のとおりです。
- 本体の圧縮ファイルが作成されない(wordpressfile_20160411-142231.tar.gz)
- データベースの圧縮ファイルが作成されない(wordpressdb_20160411-142231.sql.gz)
- レンタルサーバーに接続するときに、サーバパスワードを要求される
- サーバーパスワードをあらかじめ織り込むことができる、sshpassというコマンドがインストールできない
ぐぐって調べたページ
http://server-setting.info/centos/sshpass-ssh-auto-connect.html
14.bashコマンドについて
bash -x /usr/local/bin/cmsbackup.sh
bashコマンドが何をするためのコマンドなのか分かりません。catコマンドやlsコマンドのように、Linuxコマンド集に存在しません。
ぐぐって調べたページ
http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230577/?ST=oss#2
その他
15.セキュリティアップデートの更新について
# yum --security update
は シェルスクリプトで自動で更新できるものでしょうか?
解決に向けて
当然、このブログ記事を書いただけでは問題は解決しません。どこか解決する場に行かないと。さくらクラブ大阪のLinuxもくもく会にでも持ち込むつもりです。
〔参考サイト〕