ユーザ用ツール

サイト用ツール


dokuwikiバックアップ

DokuWikiバックアップ

DokuWikiの自動バックアップを構成する。

  1. DokuWikiを更新したら、その日の最後にバックアップを取得する。
  2. DokuWikiはDBがなく関連ファイルをアーカイブすることでバックアップできるため、全体をtar.gz形式のアーカイブにする。
  3. バックアップは10世代保存する。

更新履歴ファイルから最終更新日時を取得し、最新のアーカイブファイルのタイムスタンプと比較し、更新日時が新しければアーカイブを作成する。また、アーカイブファイルが世代数残るように、言い換えれば世代数を超過した古いアーカイブファイルを削除する。

バックアップスクリプト

[2023/8/22]アーカイブの削除処理にバグがあったため修正

dokuwiki-backup.sh
#!/bin/bash
WIKIDIR=/var/www/kijima.mydns.jp/dokuwiki/
BACKUPDIR=/media/pi/BACKUP/DokuWikiBak
MAXBACK=10
 
datestr=`date +"%Y%m%d-%H%M%S"`
savename="DokuWiki-backup_${datestr}.tgz"
findname='DokuWiki-backup_*.tgz'
history=${WIKIDIR}/data/meta/_dokuwiki.changes
lasthist=`awk 'BEGIN{last=0};$1>last{last=$1};END{print last}' ${history}`
backlist=`ls -1dt ${BACKUPDIR}/${findname} 2>/dev/null`
backlast=`ls -1dt ${BACKUPDIR}/${findname} 2>/dev/null | head -n 1`
 
# History Check
dobackup=0
if [ -z "${backlast}" ]
then
  dobackup=1
elif [ -r "${backlast}" ]
then
  backtime=`stat -c "%Y" ${backlast}`
  if [ ${lasthist} -gt ${backtime} ]
  then
    dobackup=1
  fi
fi
 
# DokuWiki Backup
if [ ${dobackup} -eq 1 ]
then
  test -d ${BACKUPDIR} || mkdir -p ${BACKUPDIR}
  tar czf ${BACKUPDIR}/${savename} ${WIKIDIR} 2>/dev/null
  if [ $? -eq 0 ]
  then
    logger -p user.info -t DokuWiki "Backup saved: ${savename}"
  else
    logger -p user.info -t DokuWiki "Backup error"
  fi
fi
 
# Remove Backup-file
files=`ls -1td ${backlist} | sed -e "1,${MAXBACK}d"`
if [ -n "${files}" ]
then
  ls -1d ${files} | xargs rm
  if [ $? -eq 0 ]
  then
    for fpath in ${files}
    do
      echo logger -p user.info -t DokuWiki "Backup removed: ${fpath##*/}"
    done
  fi
fi

定期実行設定

/etc/cron.d/backup
1 0 * * * pi /usr/local/bin/dokuwiki-backup.sh
dokuwikiバックアップ.txt · 最終更新: 2023/08/22 13:25 by Minoru Kijima