crontab 设置定时任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 每分钟执行一次: * * * * * /path/to/script.sh # 所有时间字段都是 *,表示每分钟运行。每天凌晨 2:30 执行: 30 2 * * * /path/to/backup.sh # 分钟=30,小时=2,其他字段任意。 # 每周一 8:00 执行: 0 8 * * 1 /path/to/weekly_task.sh # 分钟=0,小时=8,星期=1(周一)。 # 每 10 分钟执行一次: */10 * * * * /path/to/check_status.sh # 分钟字段 */10 表示每 10 分钟。 # 每月 1 号和 15 号的 9:00 执行: 0 9 1,15 * * /path/to/monthly_report.sh # 日期字段 1,15 表示每月 1 号和 15 号。 # 工作日的每天下午 3:00 执行: 0 15 * * 1-5 /path/to/workday_task.sh # 星期字段 1-5 表示周一到周五。 # 每小时的第 0 分钟和第 30 分钟执行: 0,30 * * * * /path/to/half_hour_task.sh 分钟字段 0,30 表示每小时的第 0 分钟和第 30 分钟。
|
1 2 3 4 5 6 7 8
| * * * * * root command-to-execute | | | | | | | | | | | +--- 用户名 | | | | +----- 星期几 (0 - 7)(0 和 7 都表示星期天) | | | +------- 月份 (1 - 12) | | +--------- 日期 (1 - 31) | +----------- 小时 (0 - 23) +------------- 分钟 (0 - 59)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #!/bin/bash
DB_USER="root" DB_PASSWORD="你的密码" DB_NAME="你的数据库名" BACKUP_DIR="/data/mysql_backup"
DATE=$(date +"%Y-%m-%d") FILENAME="${DB_NAME}_${DATE}.sql" TARFILE="${FILENAME}.tar.gz"
mkdir -p "$BACKUP_DIR"
mysqldump -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_DIR/$FILENAME"
tar -czf "$BACKUP_DIR/$TARFILE" -C "$BACKUP_DIR" "$FILENAME"
rm -f "$BACKUP_DIR/$FILENAME"
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
echo "[`date`] MySQL 备份完成: $TARFILE"
|
1 2 3
| [client] user=root password=你的密码
|
chmod 600 ~/.my.cnf
然后脚本里就可以直接使用
1
| mysqldump "$DB_NAME" > "$BACKUP_DIR/$FILENAME"
|
chmod +x /usr/local/bin/mysql_backup.sh
1
| 0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
|
MySQL 客户端程序(如 mysql, mysqldump)会自动查找并读取默认配置文件路径中的
.my.cnf,你不需要在脚本里手动“引用”