回精華區
作者itoc (站上人數:802), 信區: plan
標題[功能] 移除過期備份
時間2006/06/22 Thu 10:16:02 Updated: 2006/06/22
/*-------------------------------------------------------*/
/* util/rmbackup.c  ( NTHU MapleBBS Ver 3.10 )           */
/*-------------------------------------------------------*/
/* target : 移除過期備份                                 */
/* create : 06/06/22                                     */
/* update :   /  /                                       */
/* author : itoc.bbs@bbs.tnfsh.tn.edu.tw                 */
/*-------------------------------------------------------*/

#if 0

本程式是拿來移除 BBS 的定期備份,執行的日期和 backup* 一樣

◎ 每週按星期幾備份:#define CASE_BACKUP_BY_WDAY
若 crontab 備份的部分寫成這樣
4 3 * * 2  bin/backupbrd > /dev/null 2>&1
4 3 * * 3  bin/backupgem > /dev/null 2>&1
4 3 * * 4  bin/backupusr > /dev/null 2>&1
4 3 * * 5  bin/backupoth > /dev/null 2>&1
那麼就在 crontab 裡面加這些來刪除備份
4 3 * * 2  bin/rmbackup -b > /dev/null 2>&1
4 3 * * 3  bin/rmbackup -g > /dev/null 2>&1
4 3 * * 4  bin/rmbackup -u > /dev/null 2>&1
4 3 * * 5  bin/rmbackup -o > /dev/null 2>&1

◎ 每月按日備份:#define CASE_BACKUP_BY_DAY
若 crontab 備份的部分寫成這樣
4 3 1,16 * *  bin/backupbrd > /dev/null 2>&1
4 3 5,20 * *  bin/backupgem > /dev/null 2>&1
4 3 9,24 * *  bin/backupusr > /dev/null 2>&1
4 3 12,27 * *  bin/backupoth > /dev/null 2>&1
那麼就在 crontab 裡面加這些來刪除備份
4 2 1,16 * *  bin/rmbackup -b > /dev/null 2>&1
4 2 5,20 * *  bin/rmbackup -g > /dev/null 2>&1
4 2 9,24 * *  bin/rmbackup -u > /dev/null 2>&1
4 2 12,27 * *  bin/rmbackup -o > /dev/null 2>&1

#endif

#include <time.h>

#define BAKPATH         "/home/bbs/bak"     /* 備份檔的路徑,抄 config.h */


/* 以下二者選一個 #define,另一個 #undef */
#define CASE_BACKUP_BY_WDAY    /* 每週按星期幾備份 */
#undef  CASE_BACKUP_BY_DAY     /* 每月按日備份 */


int
main(argc, argv)
  int argc;
  char *argv[];
{
  int type;
  int yy, mm, dd;
  char *dir;
  char cmd[256];
  time_t now;
  struct tm *ptime;

  type = getopt(argc, argv, "bguo");
  if (type == 'b')
    dir = "brd";
  else if (type == 'g')
    dir = "gem";
  else if (type == 'u')
    dir = "usr";
  else if (type == 'o')
    dir = "oth";
  else
  {
    printf("%s [-b | -g | -u | -o]\n", argv[0]);
    return 0;
  }


#ifdef CASE_BACKUP_BY_WDAY

  /* 清除八週前的備份 */
  time(&now);
  now -= 86400 * 7 * 8;
  ptime = localtime(&now);
  yy = ptime->tm_year % 100;
  mm = ptime->tm_mon + 1;
  dd = ptime->tm_mday;

#elif defined(CASE_BACKUP_BY_DAY)

  /* 清除二個月前的備份 */
  time(&now);
  ptime = localtime(&now);
  yy = ptime->tm_year % 100;
  mm = ptime->tm_mon + 1;
  dd = ptime->tm_mday;
  mm -= 2;
  if (mm <= 0)
  {
    yy--;
    mm += 12;
  }

#else

  return 0;

#endif

  sprintf(cmd, "rm -rf %s/%s%02d%02d%02d",
    BAKPATH, dir, yy, mm, dd);

  system(cmd);

  return 0;
}

--
□ 本文章由 itocpc512-1.EE.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻