宝安网站公司,搜易网提供的技术服务,门户网站建设进展情况,做阿里国际网站多少钱目录 场景
单一执行例行任务 --- at#xff08;一次性#xff09;
安装
命令详解
语法格式
参数及作用
时间格式
案例
at命令执行过程分析
循环执行的例行性任务--crontab#xff08;周期性#xff09;
crontd服务安装
linux 任务调度的工分类
crontab工作过程…目录 场景
单一执行例行任务 --- at一次性
安装
命令详解
语法格式
参数及作用
时间格式
案例
at命令执行过程分析
循环执行的例行性任务--crontab周期性
crontd服务安装
linux 任务调度的工分类
crontab工作过程
crontab命令详解
语法格式
参数及作用
编辑crontab
特殊字符
案例 --- 编写脚本设置周期性任务
书写定时任务的注意事项
系统级别的计划任务 方法
案例 场景 生活中我们有太多场景需要使用到闹钟比如早上 7 点起床下午 4 点开会晚上 8 点购物等等。 在 Linux 系统里我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器或者在晚上 10 点确认系统状态等等。 但我们不可能一直守在电脑前毕竟我们也需要下班/睡觉还要陪女朋友new一个也行。而且即使在上班期间如果到点了还需要人工操作未免效率太低了。 at 命令就是为这个需求而诞生的。使用 at 命令你可以在特定时间自动完成你所设定的任务也可以实现自动化非常方便快捷
单一执行例行任务 --- at一次性
安装 at命令一般默认预装在操作系统中可以通过下面的命令查看版本信息
[rootlocalhost ~]# at -V查看执行状态
[rootlocalhost ~]# systemctl status atd
[rootlocalhost ~]# systemctl enable atd 命令详解
语法格式 at -参数 日期时间
参数及作用 参数 作用-m当任务完成后发送邮件信息给用户-l列出系统的所有任务等价与atq-d删除一个任务-v使用时间格式列出at任务-c可以列出任务后的命令内容-f从文件读取
时间格式 HH:MM --- 在今天HH小时的MM分钟后执行若时间点错过将在明天执行 HH:MM YYYY-MM-DD --- 在某年某月的某一天的特殊时间点执行该工作 now 2 minutes --- 从现在开始的时间向后推算hours days weeks
案例 案例1 --- 延迟执行ls /root 并将结果写入文件at.txt中
[rootserver ~]# at 1105
warning: commands will be executed using /bin/sh
at ls /root at.txt
at EOT --- 按下ctrld退出[rootlocalhost ~]# at -l --- 查看计划任务列表
[rootlocalhost ~]# atq --- 查看计划任务列表 案例2 --- 不使用交互性命令通过管道符实现
[rootlocalhost ~]# echo china at.txt | at now 1 minut 注意 at命令只要指定的时间正确就可以执行对应的命令 at命令的输出结果不会显示到屏幕上 at命令中执行的命令最好使用绝对路径不容易报错 过程输入at 时间 - 回车 -输入执行的命令-ctrld退出at at命令只会执行一次 at命令执行过程分析 第一步寻找/etc/at.allow 白名单是否存在写在该文件中用户才可执行at命令 第二步若/etc/at.allow不存在则寻找/etc/at.deny(黑名单)文件写在该文件中的用户不能使用at命令 第三步若两个文件都不存在则只有root用户可以使用at命令 注意 若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中 案例 --- 设置某用户at命令不可用 [rootlocalhost ~]# useradd cel --- 新建用户
[rootlocalhost ~]# passwd cel --- 设置密码123456 [rootlocalhost ~]# tail -1 /etc/passwd --- 查看 [rootlocalhost ~]# vim /etc/at.deny --- 设置黑名单 [rootlocalhost ~]# su cel --- 切换用户
[cellocalhost root]$ at 20:08 --- 尝试执行at 循环执行的例行性任务--crontab周期性
crontd服务安装 at 命令是在指定的时间只能执行一次任务,crontab 命令可以循环重复的执行定时任务,与Windows 中的计划任务有些类似 crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程在安装完成操作系统后默认会安装 crond 服务工具且 crond 服务默认就是自启动的
[rootlocalhost ~]# yum install crontabs --- 安装
[rootlocalhost ~]# systemctl status crond --- 查看状态 注意 crond 进程每分钟会定期检查是否有要执行的任务如果有则会自动执行该任务crontab 命令需要 crond 服务支持 linux 任务调度的工分类 系统执行的工作 --- 系统周期性所要执行的工作如备份系统数据、清理缓存 个人执行的工作 --- 某个用户定期要做的工作例如每隔 10 分钟检查邮件服务器是否有新信这些工作可由每个用户自行设置
crontab工作过程 当系统中有 /etc/cron.allow 文件时只有写入此文件的用户可以使用 crontab 命令没有写入的用户不能使用 crontab 命令。同样如果有此文件/etc/cron.deny 文件会被忽略因为 /etc/cron.allow 文件的优先级更高 当系统中只有 /etc/cron.deny 文件时写入此文件的用户不能使用 crontab 命令没有写入文件的用户可以使用 crontab 命令 crontab 执行的每一项工作都会被记录到 /var/log/cron 这个日志文件中 当用户使用 crontab 新建工作之后该项工作就会被记录到 /var/spool/cron/目录里面 crontab命令详解
语法格式 crontab [-u user] [-l| -r | -e]
参数及作用
参数说明-u只有root才能执行该任务-e编辑crontab工作内容-l查询crontab任务内容-r删除cronatb任务
编辑crontab
[rootlocalhost ~]# crontab -e
写入命令的格式 --- 每一行书写一个工作每个工作有6个字段
分钟0-59
小时0-23
日期1-31
月份1-12
星期0-70和7表示周日
执行动作
特殊字符
* : 任意时刻
- 表示时间范围
,逗号: 分割时段
*/数字 指定时间间隔频率如每3分钟执行一次*/3 案例
1 2 * * * : 每天凌晨2点1分执行动作0 17 * * 1 每周一下午17点整执行动作0 5 1,15 * * 每月1号和15号凌晨5点执行动作40 4 * * 1-5 每周1到周5的凌晨4点40分执行动作*/10 4 * * * : 每天凌晨4点每隔10分钟执行动作3,15 8-11 */2 * * :每隔2天的上午8点到11点的第3分钟和第15分钟执行动作* * * * * 每隔1分钟执行动作
案例 --- 编写脚本设置周期性任务
[rootlocalhost ~]# vim test.sh --- 编写脚本#!/bin/bashwhile :
doecho this is my test sh$(date) /root/cro.txtsleep 1
done [rootlocalhost ~]# crontab -e --- 设置周期性执行任务
*/1 * * * * sh /root/test.sh [rootlocalhost ~]# crontab -l --- 查看任务 [rootlocalhost ~]# cat cro.txt --- 查看结果 [rootlocalhost ~]# crontab -r --- 删除任务 注意 需要还需要删除脚本 [rootlocalhost ~]# kill -9 pid --- 删除进程 书写定时任务的注意事项 6 个字段都不能为空如果不确定则使用*表示任意时间 crontab命令任务的最小时间单位为分钟最大有效时间为月如2024年某时执行、3点30分30秒这样的时间日期无法被识别 定义时间时日期和星期最好不要一起出现由于都是以天为单位非常让管理员混淆 在定时任务中不能不管是写命令还是在脚本中写命令最好都用绝对路径相对路径有时会报错
系统级别的计划任务 crontab -e 时每个用户都可以执行的命令但有时定时任务必须由系统执行此时就需要编辑/etc/crontab配置文件来实现 [rootlocalhost ~]# vim /etc/crontab 注意 仅能通过root定义不可以使用普通账户身份去执行计划任务 方法 在/etc/crontab 最后一行新增计划任务即可 解析 SHELL/bin/bash --- 指定系统使用哪个shell解释器去执行 PATH/sbin:/bin:/usr/sbin:/usr/bin --- 系统执行命令的搜索路径 MAILTOroot --- 表示执行任务的信息通过邮件发送给谁 user-name --- 表示执行命令的用户是谁 案例 每天6:00点将日志文件/var/log/messages 文件备份到/backup目录中备份后文件名称修改为logfileYYYY-MM-DD-HH:MM:SS
0 6 * * * root /bin/cp /var/log/messages /backup/logfiledate \%Y-\%m-\%d-\%H:\%M:\%S 注意 反引号 --- 表示将引起的内容识别为命令 在cronatb中%表示换行需要增加转义符\