← 返回首页

Linux定时任务:Crontab详解

📂 devops ⏱ 2 min 210 words

Linux定时任务:Crontab详解

什么是Crontab

Crontab是Linux系统中用于设置周期性执行任务的工具。通过crontab,可以定时执行脚本、备份、清理等运维任务。

Crontab命令

# 编辑当前用户的crontab
crontab -e

# 查看当前用户的crontab
crontab -l

# 删除当前用户的crontab
crontab -r

# 编辑指定用户的crontab
crontab -e -u username

Crontab语法

*    *    *    *    *    command
分   时   日   月   周   命令

时间字段

字段 范围 说明
分钟 0-59
小时 0-23
日期 1-31
月份 1-12
星期 0-7 (0和7都是周日)

特殊字符

字符 说明 示例
* 任意值 * * * * * 每分钟
, 列表 1,3,5 * * * * 1、3、5分钟
- 范围 1-5 * * * * 1到5分钟
/ 间隔 */5 * * * * 每5分钟

常用示例

# 每天凌晨1点执行
0 1 * * * /path/to/script.sh

# 每5分钟执行
*/5 * * * * /path/to/script.sh

# 每周一上午10点
0 10 * * 1 /path/to/script.sh

# 每月1号凌晨2点
0 2 1 * * /path/to/script.sh

# 工作日每天9-18点每小时执行
0 9-18 * * 1-5 /path/to/script.sh

# 每天8点和20点
0 8,20 * * * /path/to/script.sh

系统级Crontab

/etc/crontab

# 系统crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 格式:分 时 日 月 周 用户 命令
0 1 * * * root /path/to/script.sh

/etc/cron.d/

# /etc/cron.d/myjob
0 * * * * root /path/to/script.sh

预定义目录

目录 执行频率
/etc/cron.hourly/ 每小时
/etc/cron.daily/ 每天
/etc/cron.weekly/ 每周
/etc/cron.monthly/ 每月

日志管理

# Crontab日志
tail -f /var/log/cron
# 或
tail -f /var/log/syslog | grep cron

# 命令输出重定向
0 1 * * * /path/to/script.sh >> /var/log/myjob.log 2>&1

注意事项

  1. 环境变量:cron环境变量与登录环境不同,需要在脚本中设置
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export JAVA_HOME=/usr/local/java
  1. 脚本权限:确保脚本有执行权限
chmod +x /path/to/script.sh
  1. 绝对路径:尽量使用绝对路径

实践:自动化备份脚本

#!/bin/bash
# /opt/scripts/backup.sh

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
KEEP_DAYS=7

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

# 备份数据库
mysqldump --all-databases | gzip > $BACKUP_DIR/mysql_$DATE.sql.gz

# 备份配置文件
tar -czf $BACKUP_DIR/config_$DATE.tar.gz /etc/nginx /etc/mysql

# 清理旧备份
find $BACKUP_DIR -name "*.gz" -mtime +$KEEP_DAYS -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +$KEEP_DAYS -delete

echo "备份完成: $DATE"

添加Crontab条目

# 每天凌晨2点执行备份
crontab -e
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

总结

Crontab是Linux自动化运维的基础工具。合理使用定时任务,可以实现系统维护、数据备份、日志清理等自动化操作。