作者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;
}
--
□ 本文章由 itoc 從 pc512-1.EE.NCTU.edu.tw 發表