1. 首页 > IT综合教程 > 正文

75. Linux系统定时任务管理培训

一、定时任务概述

Linux系统定时任务用于在指定时间自动执行命令或脚本,是自动化运维的重要工具。主要包括cron和at两种方式。

1.1 定时任务类型

类型 说明 适用场景
cron 周期性任务 定期备份、日志清理
at 一次性任务 延迟执行命令
anacron 非连续运行系统 笔记本、工作站

二、cron服务管理

2.1 cron服务

# 安装cron
yum install -y cronie

# 启动服务
systemctl start crond

# 停止服务
systemctl stop crond

# 重启服务
systemctl restart crond

# 查看状态
systemctl status crond

# 开机自启
systemctl enable crond

# 查看日志
tail -f /var/log/cron
# 输出示例
● crond.service – Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
Active: active (running) since Mon 2024-01-15 10:00:00 CST
Main PID: 1234 (crond)

三、crontab配置

3.1 crontab语法

# crontab格式
# 分钟 小时 日 月 周 命令
# *    *    *  *  *  command

# 字段说明
分钟: 0-59
小时: 0-23
日:   1-31
月:   1-12
周:   0-7 (0和7都表示周日)

# 特殊字符
*     # 任意值
,     # 列举多个值
-     # 范围
/n    # 步长

# 示例
* * * * * command        # 每分钟执行
0 * * * * command        # 每小时执行
0 0 * * * command        # 每天零点执行
0 2 * * * command        # 每天凌晨2点执行
0 0 * * 0 command        # 每周日零点执行
0 0 1 * * command        # 每月1号零点执行
0 0 1 1 * command        # 每年1月1号零点执行
*/5 * * * * command      # 每5分钟执行
0 9-17 * * * command     # 每天9点到17点每小时执行
0 9,12,15 * * * command  # 每天9点、12点、15点执行

3.2 crontab命令

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

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

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

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

# 查看指定用户的crontab
crontab -l -u username

# 从文件导入
crontab cronfile

# 导出到文件
crontab -l > cronfile

# 查看所有用户的crontab
ls /var/spool/cron/

3.3 crontab配置示例

# 编辑crontab
crontab -e

# 添加任务
# 每天凌晨2点备份
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# 每5分钟检查服务
*/5 * * * * /usr/local/bin/check_service.sh

# 每周日凌晨3点清理日志
0 3 * * 0 /usr/local/bin/clean_logs.sh

# 每月1号凌晨1点生成报告
0 1 1 * * /usr/local/bin/monthly_report.sh

# 每小时同步时间
0 * * * * /usr/sbin/ntpdate ntp.aliyun.com

# 工作日早上8点发送通知
0 8 * * 1-5 /usr/local/bin/morning_notify.sh

四、系统级定时任务

4.1 /etc/crontab

# 系统级crontab文件
cat /etc/crontab

# 格式(比用户crontab多一个用户字段)
# 分钟 小时 日 月 周 用户 命令

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 示例
0 2 * * * root /usr/local/bin/backup.sh
*/10 * * * * nginx /usr/local/bin/check_nginx.sh

4.2 定时任务目录

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

# 添加每日任务
cat > /etc/cron.daily/backup << 'EOF'
#!/bin/bash
/usr/local/bin/backup.sh
EOF

chmod +x /etc/cron.daily/backup

# 查看执行时间配置
cat /etc/anacrontab

4.3 cron.d目录

# /etc/cron.d/ 目录
# 用于放置独立的cron配置文件

# 创建应用定时任务
cat > /etc/cron.d/myapp << 'EOF'
# MyApp定时任务
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 2 * * * root /usr/local/bin/myapp_backup.sh
*/5 * * * * root /usr/local/bin/myapp_check.sh
EOF

# 设置权限
chmod 644 /etc/cron.d/myapp

五、at一次性任务

5.1 at服务管理

# 安装at
yum install -y at

# 启动服务
systemctl start atd

# 开机自启
systemctl enable atd

# 查看状态
systemctl status atd

5.2 at任务管理

# 在指定时间执行
at 10:00
at> echo "Hello" > /tmp/test.txt
at>   # 按Ctrl+D结束

# 在指定日期时间执行
at 10:00 2024-12-31
at 10:00 Dec 31

# 相对时间执行
at now + 1 hour
at now + 30 minutes
at tomorrow

# 从文件读取命令
at -f script.sh now + 1 hour

# 查看任务队列
atq

# 查看任务详情
at -c 1

# 删除任务
atrm 1

六、定时任务权限控制

6.1 允许/拒绝用户

# 允许使用cron的用户
/etc/cron.allow

# 拒绝使用cron的用户
/etc/cron.deny

# 规则优先级
# 1. 如果cron.allow存在,只有列出的用户可以使用
# 2. 如果cron.allow不存在,cron.deny中列出的用户不能使用
# 3. 如果两个文件都不存在,只有root可以使用

# 示例:只允许特定用户
echo "root" > /etc/cron.allow
echo "zhangsan" >> /etc/cron.allow

# 示例:拒绝特定用户
echo "lisi" > /etc/cron.deny

# at的权限控制
/etc/at.allow
/etc/at.deny

七、定时任务调试

7.1 常见问题排查

# 检查cron服务状态
systemctl status crond

# 查看cron日志
tail -f /var/log/cron

# 检查脚本权限
ls -l /usr/local/bin/backup.sh

# 检查脚本语法
bash -n /usr/local/bin/backup.sh

# 手动执行脚本测试
/usr/local/bin/backup.sh

# 检查环境变量
# 在脚本开头添加
#!/bin/bash
. /etc/profile
. ~/.bashrc

# 检查路径问题
# 使用绝对路径
0 2 * * * /bin/bash /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# 检查输出重定向
# 确保正确处理标准输出和错误输出
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

7.2 调试技巧

# 使用logger记录日志
0 2 * * * /usr/local/bin/backup.sh 2>&1 | logger -t backup

# 发送邮件通知
MAILTO=admin@fgedu.net.cn
0 2 * * * /usr/local/bin/backup.sh

# 记录执行时间
0 2 * * * echo "Start: $(date)" >> /var/log/backup.log && /usr/local/bin/backup.sh && echo "End: $(date)" >> /var/log/backup.log

# 添加锁文件防止重复执行
#!/bin/bash
LOCKFILE=/tmp/backup.lock
if [ -f $LOCKFILE ]; then
    echo "Backup already running"
    exit 1
fi
touch $LOCKFILE
# 执行备份任务
rm -f $LOCKFILE

八、最佳实践

实践项 建议
脚本路径 使用绝对路径
日志记录 重定向输出到日志文件
错误处理 检查命令返回值
环境变量 在脚本中设置必要变量
注意事项:

  • 确保脚本有执行权限
  • 使用绝对路径避免路径问题
  • 正确处理标准输出和错误输出
  • 添加日志便于问题排查

九、总结

定时任务是自动化运维的基础。通过本培训文档,您应该掌握了:

学习交流加群风哥微信: itpux-com

  • cron服务管理
  • crontab语法和配置
  • 系统级定时任务配置
  • at一次性任务使用
  • 定时任务权限控制
  • 常见问题排查方法
IT运维培训文档系列 | 第75篇 | Linux系统定时任务管理培训

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息