Crontab 完整使用流程


第一阶段:编写与测试脚本

1. 创建脚本文件

# 统一存放脚本的目录
mkdir -p /opt/scripts

# 新建脚本(以备份为例)
vim /opt/scripts/backup_mysql.sh

2. 写入脚本内容

#!/bin/bash
# MySQL备份脚本

# 定义变量(绝对路径!)
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)
MYSQL_USER="root"
MYSQL_PASS="你的密码"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行备份
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases | gzip > $BACKUP_DIR/all_$DATE.sql.gz

# 删除7天前的备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete

# 记录日志
echo "$(date +'%Y-%m-%d %H:%M:%S') 备份完成" >> /var/log/backup.log

3. 添加执行权限

chmod +x /opt/scripts/backup_mysql.sh

4. 必须测试!(这一步跳过必踩坑)

# 手动执行,看报错
bash /opt/scripts/backup_mysql.sh

# 如果报错,立刻解决(最常见问题:命令找不到、权限不足、路径不存在)
# 命令找不到 -> 使用绝对路径,如 /usr/bin/mysqldump

第二阶段:添加到Crontab

5. 编辑当前用户的定时任务

crontab -e

第一次使用会提示选择编辑器,选vim/ nano都行

6. 写入定时规则(最简版)

# 每天凌晨2点执行MySQL备份
0 2 * * * /opt/scripts/backup_mysql.sh

7. 生产级写法(加日志、加PATH)

# 设置PATH环境变量(解决cron找不到命令的问题)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 每天凌晨2点执行,并记录日志
0 2 * * * /opt/scripts/backup_mysql.sh >> /var/log/backup_cron.log 2>&1

# 每周日凌晨3点清理日志
0 3 * * 0 find /var/log/nginx -name "*.log" -mtime +7 -delete

8. 保存退出

  • Vim: ESC:wq
  • Nano: Ctrl+OEnterCtrl+X

第三阶段:验证与调试

9. 立即查看任务是否生效

# 列出当前用户所有定时任务
crontab -l

# 查看cron服务状态(Linux)
systemctl status crond    # CentOS/RHEL
systemctl status cron     # Ubuntu/Debian

10. 快速测试(不等时间点)

# 方法1:手动执行脚本
bash -x /opt/scripts/backup_mysql.sh   # -x会显示详细执行过程

# 方法2:改时间为最近1-2分钟(临时测试)
*/1 * * * * /opt/scripts/backup_mysql.sh   # 每分钟执行,测完立刻删掉!

11. 查看执行日志(排错必看)

# 查看cron自身的执行记录
grep CRON /var/log/syslog      # Ubuntu/Debian
grep crond /var/log/messages   # CentOS/RHEL

# 查看你脚本重定向的日志
tail -f /var/log/backup_cron.log

第四阶段:维护与优化

12. 修改定时任务

crontab -e   # 直接编辑,覆盖原文件

13. 删除定时任务

crontab -r   # 删除所有任务(危险!慎用)
# 推荐手动编辑删除指定行
crontab -e   # 删掉对应行即可

14. 多用户管理(root看所有)

# 查看其他用户的crontab(需root)
crontab -u www -l

# 编辑其他用户的crontab
crontab -u www -e

避坑流程图

┌─────────────┐
│  写脚本.sh  │
└──────┬──────┘
       ↓
┌─────────────┐    报错    ┌─────────────┐
│  bash执行   │ ────────→ │  修复问题   │
└──────┬──────┘           └─────────────┘
       ↓ 成功
┌─────────────┐
│ crontab -e  │
└──────┬──────┘
       ↓
┌─────────────┐   失败    ┌─────────────┐
│ 等待自动跑  │ ────────→ │ 查看/var/log│
└─────────────┘           └─────────────┘

一句话总结流程

写脚本 → 加执行权限 → 手动跑通 → crontab -e 写入 → tail -f 看日志 → 收工

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注