Mac好きのアラフォーweb製作者ののんびりブログ

Mac好き、iPhone好きのアラフォーのWEB製作者がその日覚えたこと、気がついたことを備忘録的に淡々とつづるブログです。自分が忘れないために残したものが誰かのお役に立てれば…。

さくらでCRONを動かしてサイトのバックアップをしたい!のにはまった件

さくらインターネットのスタンダードプランで契約しているサーバ内でCMSを使って運営している、とあるサイトで、日常的に適切なバックアップをしっかりと取っていないことふとに気づきました。

このままでは、いざ何かあったときに復旧が難しそうだなということで、対策を立てることにしました。

さくらのサーバなのでCRONが使えるし、週に一度くらいサイトのデータを納めているディレクトリをローカルに落としやすい形にして、忘れずにローカルに落とすという一連の流れを、自分のルーチンにしてしまえば、何もしていない現状よりはいいだろうと…。

作り込めば、サーバの容量を逼迫させないためにDropboxにバックアップファイルを置いたり、作成から⚪︎⚪︎日後に削除、とかいろいろとやれるんでしょうが、今回は

  • サーバの一般からアクセス出来ない領域にバックアップファイルを置く。
  • 定期的にftpで自らダウンロード
  • 必要の無くなったサーバ上のバックアップファイルは自らで適宜削除

という必要最低限の条件にしました。

まず事前準備として、あまりアクセスしてほしくないファイル群なので、サイトのルートより上にバックアップのファイル置き場としてbackupディレクトリを用意しました。

バックアップに持っていくための設定は以下の感じで。

  1. バックアップファイルの作成はCRONの設定で週に一度実行
  2. CRONが動いた日付を名前にしたディレクトリを作成
  3. 日付の名前で生成されたディレクトリの中に「実行日.backup.zip」の名前でサイト内のデータを圧縮したものを置く

これを実行するために、まず、こんな感じでプログラムを書きました。

#!/bin/sh

# 実行日の日付を生成 TODAYに代入
TODAY=`date '+%Y%m%d'`

cd /home/<さくらインターネットでのアカウント>/backup
mkdir -m 755 $TODAY

cd /home/<さくらインターネットでのアカウント>/backup/$TODAY
zip -r $TODAY.backup.zip /home/<さくらインターネットでのアカウント>/www/

上のように書いた「backup.sh」をさくらインターネットのサーバコントロールパネルの「CRONの設定」から登録しようとしたところ…。

入力内容に問題のある項目があります。

入力内容に問題のある項目があります。」とのこと。怒られた…。

何回やってもダメなので、実行コマンドの欄を

cd /home/kid-studio; /home/<さくらインターネットでのアカウント>/backup.shとしたら、通った。

プログラムのある場所がわからないから、受け付けてくれなかったんですね…。

やっとパスが通って、CRONを登録できたと思ったら、postmasterに

/home/<さくらインターネットでのアカウント>/backup.sh: Permission denied

と…。

パーミッションが間違えてるのか…。

ここでパーミッション700に。

お次は、どうも変数として使いたかったTODAYが定義されていないような…。

ここで TODAYexportとつけてみると、通る。

ようやく通ったかとホッとするのもつかの間、今度はpostmasterに

/home/<さくらインターネットでのアカウント>/backup.sh: zip: not found

とのメッセージが。

ターミナルでzip -r backup.zip /home/<さくらインターネットでのアカウント>/www/って打った時には大丈夫だったのに、なんでやねん!

と思いつついろいろ調べてみると、どうもzipコマンドがある場所がわかってないらしい。 ちゃんと明示しろってことね。

じゃあっていうわけでzipコマンドの前に/usr/local/bin/と明示してあげたら、ようやく行けた…。

で、ようやく完成したプログラムがこちら。

#!/bin/sh

# 実行日の日付を生成 TODAYに代入
export TODAY=`date '+%Y%m%d'`

cd /home/<さくらインターネットでのアカウント>/backup
mkdir -m 755 $TODAY

cd /home/<さくらインターネットでのアカウント>/backup/$TODAY
/usr/local/bin/zip -r $TODAY.backup.zip /home/<さくらインターネットでのアカウント>/www/

勉強不足もあるのかもしれないですが、調べた内容ですんなりいかないものですね。

サーバの構成とかにもよるのでしょうが、さくらインターネットのスタンダードで契約しているサーバで定期的にバックアップ用にサイトの中身をzipにして、指定のディレクトリに置くことに苦心した備忘録でした。

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)