Linux计划任务详解
一、任务计划的作用
二、windows如何设置任务计划
三、linux中对应的任务计划 crontab 的 使用
四、熟悉任务计划的使用场景
一、任务计划的讲解
1.1 什么是计划任务?
计划任务是指让系统在指定的时间点自动执行特定命令或脚本的功能。它的主要作用是:
自动执行重复性工作,无需人工干预
在系统负载较低时执行资源密集型任务
确保关键维护任务按计划执行
实现系统的自动化管理
# 简单来说,计划任务就是:
在指定的时间执行指定的操作!
计划任务就像是给计算机设置的"闹钟",到了指定时间,计算机就会自动执行你安排的工作。
1.2 计划任务的应用场景
常见的应用场景包括:
场景 | 示例 |
---|---|
系统维护 | 定期备份数据、清理临时文件 |
服务管理 | 定时重启服务、检查服务状态 |
数据处理 | 定期生成报表、数据同步 |
监控告警 | 定时检查系统资源使用情况 |
自动更新 | 定期更新软件包、安全补丁 |
二、windows如何设置任务计划
1、打开任务计划
2、设置计划任务名称
3、设置触发时间
4、选择要执行的操作类型
5、设置要启动的程序
三、linux中对应的任务计划 crontab 的 使用
3.1 Linux中的计划任务
Linux系统使用crontab
命令来管理计划任务。每个用户可以有自己的计划任务列表。
3.1.1 crontab命令基础
基本语法:
crontab [选项]
常用选项:
-l:list,显示当前用户的计划任务列表
-e:edit,使用编辑器修改计划任务
-r:remove,删除当前用户的所有计划任务
-u 用户名:指定要管理的用户(需要root权限)
3.1.2 查看和编辑计划任务
1. 查看当前用户的计划任务:
crontab -l
# 如果没有设置过计划任务,会显示:
no crontab for root # 表示root账号下没有计划任务
2. 编辑计划任务:
crontab -e
3.2 计划任务的语法规则
crontab语法格式
# 基本格式(每个字段用空格分隔)
分钟 小时 日期 月份 星期 命令
第二个小时的第0分钟 -> 2:00 每天凌晨2点
# 例如:每天凌晨2点执行备份
0 2 * * * /usr/local/bin/backup.sh
时间字段详解
字段 | 取值范围 | 描述 |
---|---|---|
分钟 | 0-59 | 一小时中的第几分钟 |
小时 | 0-23 | 一天中的第几小时(0表示午夜) |
日期 | 1-31 | 一个月中的第几天 |
月份 | 1-12 | 一年中的第几个月 |
星期 | 0-7 | 一周中的第几天(0和7都表示星期日) |
3.3 特殊符号
计划任务中可以使用的特殊符号:
符号 | 描述 | 示例 |
---|---|---|
* | 表示所有可能的值 | * * * * * 表示每分钟执行一次 |
– | 表示范围 | 1-5 表示1,2,3,4,5 1-5 * * * 每小时执行5次,第1分钟~第五分钟 |
/ | 表示间隔频率 | */10 表示每隔10个单位 0/5 * * * 第0分钟每隔五分钟执行一次 |
, | 表示列举多个值 | 1,3,5 表示1,3,5这三个值 1,3,4 * * * 每小时执行3次,第一分钟,第三分钟,第四分钟执行一次 |
分钟字段示例
# 每分钟执行
* * * * * command
# 每5分钟执行
0/5 * * * * command
# 在第0、15、30、45分钟执行
0,15,30,45 * * * * command
# 在第1到第10分钟的每分钟执行
1-10 * * * * command
小时字段示例
# 每小时的第30分钟执行
30 * * * * command
# 每天0点、12点的第15分钟执行
15 0,12 * * * command
0:15 12:15
# 每天上午8点到11点的第0分钟执行
0 8-11 * * * command
8:00 9:00 10:00 11:00
# 每隔6小时执行一次(0点、6点、12点、18点的第0分钟)
0 */6 * * * command
组合表达式示例
# 工作日(周一到周五)的上午9点执行
0 9 * * 1-5 command
# 每小时的第15分钟和第45分钟执行
15,45 * * * * command
# 每天8点到18点之间,每隔2小时执行一次
0 8-18/2 * * * command
3.4 常用计划任务时间表
描述 | cron表达式 |
---|---|
每分钟执行 | * * * * * |
每小时整点执行 | 0 * * * * |
每天午夜执行 | 0 0 * * * |
每天凌晨3点执行 | 0 3 * * * |
每周日凌晨2点执行 | 0 2 * * 0 |
每月1日执行 | 0 0 1 * * |
工作日早上9点执行 | 0 9 * * 1-5 |
每15分钟执行一次 | */15 * * * * |
每天上午9点到下午6点,每小时执行 | 0 9-18 * * * |
每年1月1日执行 | 0 0 1 1 * |
3.5 命令部分注意事项
在crontab中指定命令时,需要注意以下几点:
-
使用命令的完整路径(可以用
which 命令名
查看) -
注意环境变量可能与登录shell不同
-
命令的输出最好重定向到文件或者/dev/null
-
如果命令较复杂,建议写成脚本文件再执行
四、熟悉任务计划的使用场景
4.1 实际案例演示
每分钟创建一个时间戳文件
# 每分钟在/tmp目录下创建一个带时间戳的空文件
* * * * * touch /tmp/file_$(date +\%Y\%m\%d_\%H\%M\%S)
2025.5.11创建
这里的 $(date)
会被替换为 date
命令的输出(如 2025年 03月 26日 星期三 13:06:33 CST
),最终输出类似于:
Today is 2025年 03月 26日 星期三 13:06:33 CST
%Y
:四位年份(如2025
)
%m
:两位月份(如03
)
%d
:两位日期(如26
)
%H
:两位小时(24 小时制,如13
)
%M
:两位分钟(如03
)
%S
:两位秒数(如45
)$(date +\%Y) => 2025
$(date +\%Y\%m) => 202503
$(date +\%Y\%m\%d) => 20250326
定时显示当前系统时间
将系统时间记录到文件中,方便查看计划任务是否按时执行:
# 每5分钟将当前时间写入文件
*/5 * * * * echo $(date) >> /home/time_log.txt
# 查看记录文件
cat > /home/time_log.txt
系统信息监控
每小时记录一次系统资源使用情况:
# 每小时记录内存使用情况
0 * * * * free -m > > /home/memory_$(date +\%Y\%m\%d_\%H).log
# 每小时记录磁盘使用情况
0 * * * * df -h > > /home/disk_$(date +\%Y\%m\%d_\%H).log
自动备份重要文件
每天自动备份用户的文档目录:
# 每天凌晨2点备份文档目录
0 2 * * * tar -czf > /home/backup_$(date +\%Y\%m\%d).tar.gz > /home/Documents
4.2 案例演示
让我们逐步创建一个计划任务并验证其执行:
1. 创建一个需要执行的脚本:
# 创建一个简单的脚本
vim /home/myscript.sh
#!/bin/bash
echo "当前时间: $(date)" >> > /home/script_log.txt
echo "当前用户: $(whoami)" >> > /home/script_log.txt
echo "-------------------" >> > /home/script_log.txt
EOF
# 添加执行权限
chmod u+x /home/myscript.sh
2. 设置计划任务每分钟执行一次:
# 编辑计划任务
crontab -e
# 添加如下行
* * * * * > /home/myscript.sh
3. 验证计划任务是否执行
# 等待一分钟后,查看日志文件
tail -f > /home/script_log.txt
4. 修改计划任务为每5分钟执行一次:
# 再次编辑计划任务
crontab -e
# 修改为
*/5 * * * * /home/myscript.sh
简单的备份脚本
创建一个简单的备份脚本:
# 创建脚本
vim /home/backup.sh
cp /home/important.txt /home/backup/important_$(date +%Y%m%d).txt
echo "备份完成:$(date)" >> /home/backup/backup.log
# 添加执行权限
chmod u+x /home/backup.sh
设置每天晚上10点执行:
# 编辑计划任务
crontab -e
# 添加以下行
0 22 * * * /home/backup.sh
作者:码农101号