crond指令

任务调度:是指系统在某个时间执行的特定的命令或程序(有点像闹钟)
任务调度分类:

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
  2. 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 的数据库的备份

基本语法:crontab [选项]

选项 说明
-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的crontab任务
  1. 设置个人任务调度,执行 crontab -e 命令然后回车
  2. 接着输入任务到调度文件

/1* ls -l /etc/ > /tem/to.txt**
上述命令的意思是 每小时的每分钟执行 ls -l /etc/ > /tem/to.txt 命令,这句命令的意思是 把etc目录下面的内容以列表的形式显示到终端然后将其重定向到 tem/to.txt 文件

参数细节说明

5个占位符的说明

占位符 含义 范围
第一个 * 一小时当中的第几分钟 0-59,如果写的是*/1,代表每一分钟都执行
第二个* 一天当中的第几小时 0-23
第三个* 一个月当中的第几天 1-31
第四个* 一年当中的第几月 1-12
第五个* 一周当中的星期几 0-7(0-7都代表星期日)

特殊符号说明

特殊符号 含义
* 代表任何时间。比如第一个*就代表一小时中每分钟都执行一次的意思
, 代表不连续时间。比如0 8,12,16 *命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围,比如0 5 1-6命令,代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如 /10 *,代表每隔10分钟就执行一遍命令

特殊时间执行案例

时间 含义
45 22 * 在22点45分执行命令
0 17 1 每周1的17点0分执行命令
0 5 1,15 每月1号和15号的凌晨5点0分执行命令
40 4 1-5 每天的凌晨4点,每隔10分钟执行一次命令
/10 4 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行命令。
注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

每隔一分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
/1 date>>/tmp/mydate 1
每隔一分钟,将当前日期和日历都追加到 /home/mycal 文件中
vim /home/my.sh 1
给 my.sh 写入内容 date>>/home/mycal 和cal>>/home/mycal
然后给 my.sh 增加执行权限:chmod u+x /home/my.sh
crontab -e 写入
/1 /home/my.sh
每天凌晨 2:00 将 mysql 数据库 testdb,备份到文件中。
0 2 * mysqldump -u root -proot testdb > /home/db.bak 1
mysqldump -u root -p密码 数据库 > /home/db.bak

crond相关指令

  • conrtab -r 终止任务调度
  • crontab -l 列出当前有哪些任务调度
  • service crond restart 重启任务调度

    at定时任务

  1. at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行
  2. 默认情况下,atd 守护进程每 60s 检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
  3. at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
  4. 在使用 at 命令时,一定要保证 atd 进程的启动,可以使用相关指令来查看

ps -ef | grep atd [可以监测atd是否在运行]
image.png
基本语法:

  • at [选项] [时间]
  • Ctrl + D 结束 at 命令的输入,输出两次 | 选项 | 说明 | | —- | —- | | -m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 | | -i | atq的别名 | | -d | atrm的别名 | | -v | 显示任务将被执行的时间 | | -c | 打印任务的内容到标准输出 | | -V | 显示版本信息 | | -q<队列> | 使用指定的队列 | | -f<文件> | 从指定文件读入任务而不是从标准输入读入 | | -t<时间参数> | 以时间参数的形式提交要运行的任务 |

at时间定义

at指定时间的方法:

  1. 接受在当天的 hh:mm(小时,分钟)式的时间指定。假如该时间已过去,那么久放在第二天执行。例如: 04:00
  2. 使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午四点)等比较模糊的词语来指定时间
  3. 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm
  4. 指定命令执行的具体日期,指定格式为 month day(月 日) 或者 mm/dd/yy(月/日/年) 或者 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04::00 2023-11-23
  5. 使用相对计时法。指定格式为:now+count time-units,now 就是当前时间,time-units 是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count 是时间的数量,几天,几小时。例如: now+5minutes
  6. 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间

案例一
2天后的下午5点执行 /bin/ls/home
at 5pm + 2 days
image.png
image.pngimage.png
案例二
atq 命令来查看系统中没有执行的工作任务
atq

案例三
明天17点钟,输出时间到指定文件内,比如 /root/data100.log
at 5pm tomorrow
image.png
案例四
删除已经设置的任务,atrm编号
atrm 2 表示将 job 队列,编号为4的job删除。
image.png