一、定时任务最常见的几类场景

原始笔记中总结了 cron 的典型用途:

  • 同步系统时间
  • 进行定时备份
  • 执行日常循环类操作
  • 巡检并发送结果

本文先聚焦最基础也最常见的三类场景:时间同步、目录备份和脚本变量使用。

二、案例一:定时同步系统时间

2.1 使用的命令

原始示例使用的是:

/sbin/ntpdate ntp1.aliyun.com

2.2 定时任务配置

每 2 分钟同步一次系统时间:

*/2 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

这里把标准输出和错误输出都重定向到了空设备,避免 cron 反复发送执行输出。

2.3 调试方法

可以先故意改错系统时间:

$ date -s '20200101'

等待两分钟后再检查时间:

$ date

2.4 查看 cron 日志

$ tail -f /var/log/cron

需要注意的是:cron 日志通常只能告诉你“任务有没有被触发执行”,并不能完整证明“业务逻辑一定执行成功”。

三、案例二:定时备份 /etc/ 目录

3.1 先手工验证命令

备份目录一般建议放在业务低谷期,比如凌晨 1 点。

手工执行示例:

$ mkdir -p /backup/
$ tar zcf /backup/etc-`date +%F_%w`.tar.gz /etc/

3.2 封装成脚本

创建脚本目录:

$ mkdir -p /server/scripts/

一个简单脚本可以写成:

#!/bin/bash
tar zcf /backup/etc-`date +%F_%w`.tar.gz /etc/

执行测试:

$ sh backup-etc.sh

3.3 加入定时任务

调试阶段可以先每分钟执行一次:

* * * * * /bin/sh /server/scripts/backup-etc.sh >/dev/null 2>&1

检查结果时可以使用:

$ watch ls -l /backup/

确认没问题后,再改成正式时间,例如每天凌晨 1 点:

00 01 * * * /bin/sh /server/scripts/backup-etc.sh >/dev/null 2>&1

四、案例三:脚本中的变量怎么配合定时任务使用

定时任务越复杂,越不建议把所有逻辑都直接写在 crontab 里。脚本里使用变量可以让内容更清晰,也便于后续维护。

4.1 变量的基本思路

在脚本里,像时间、IP、目录名、文件名这类需要重复引用的信息,都适合放进变量里。

变量命名建议:

  • 不要用数字开头
  • 尽量使用有语义的名字
  • 特殊场景下可以用下划线分隔单词

4.2 简单变量示例

$ kui="熟能生巧,练习才能掌握"
$ echo $kui

4.3 变量用于目录、文件和命令结果

dir=/server/scripts/
file=backup-etc.sh
time=`date +%F_%w`
echo $time

生成带时间的文件名:

time=`date +%F_%w`
touch oldboy-$time.txt

4.4 在备份脚本中使用变量

原始笔记给出的变量版备份脚本示例如下:

#!/bin/bash

# 定义变量
time=`date +%F_%w_%H`

# 引用变量进行备份
tar zcf /backup/etc-$time.tar.gz /etc/

这样做的好处是:时间格式只定义一次,后面统一引用,更不容易写错。

五、小结

cron 实战里最有价值的一步,往往不是“会写一条计划任务”,而是把任务拆成下面三个层次:

1、先手工执行命令,确认逻辑正确 2、再把命令封装进脚本 3、最后让 crontab 只负责“定时调用脚本”

按照这个顺序做,后续无论是时间同步、目录备份还是更复杂的巡检任务,都会稳很多。