linux的定时任务和延期执行操作

黎小强
2020-11-12 / 0 评论 / 1,351 阅读 / 正在检测是否收录...

命令分别有dataatcorntabsleepatq

date命令

调节时间

定制date的输出

date "+%H:%M:%S"            #输出时分秒
date "+%Y:%m:%d"            #输出年月日 
date "+%H时:%M分:%S秒"        #输出时分秒-带中文

date命令修改系统时间

修改系统时间需要使用root身份
sudo date 10121430        #表示修改时间为 10月12号14点30分

at命令

延迟执行一个程序 , 可以用at命令来设定一个程序的执行时间, at是英文 “...时刻”的意思, 注意:at命令只能让程序执行一次

如果没有at命令,就可以安装sudo yum install at

在指定时刻执行程序

先用at命令后接 想要程序执行的确定时刻
再输入你想要在以上指定时刻执行的命令
[root@VM_0_4_centos ~]# at 14:12
at> touch file.txt
at> <EOT>
job 1 at Wed Nov 11 14:12:00 2020

我这里写:在14:12分的时候去执行创建一个文件,可以指定多个命令,结束 用ctrl+D 去退出at命令。

  • job 表示“工作,任务” 的意思,表示创建一个任务
  • 1 是job的编号,表示1号任务
  • at就是执行的任务时间
  • 如果想在明天14:12分执行,就at 14:12 tomorrow , 如果想在指定日期 2020年5月10号执行 就at 14:12 05/10/20 (格式是美国日期 月/日/年 )

在指定间隔之后执行程序

比如在10分钟之后执行 at now +10 minutes
at now +10 minutes    #10分钟后执行
at now+7 weeks         #在7个星期后执行

关键词:minutes-分钟hours-小时days - 天weeks-星期 , months-月years-年


atq命令

列出正等待执行的at任务 , q是英文 queue 的首字母,表示 “队列”
[root@VM_0_4_centos ~]# atq
3    Wed Nov 11 14:48:00 2020 a root

atrm命令

删除正在等待执行的at任务 ,rm是英文 remove 的首字母,表示“删除”, atrm命令后接at任务的编号,例如1,2,3,4...
atrm 3

sleep命令

休息一会 ,sleep英文 是“睡觉、睡眠”的意思 ,
  • 可以用分号隔开多个命令,使之一个接一个执行 ,跟管道不一样,管道是前一个命令的输出作为后一个命令的输入
  • 用分号隔开的命令并没有关联 ,例如 touch file.txt ; rm file.txt 创建文件再删除。在2句命令之间可以插入一定的暂停等待时间。
touch file.txt ; sleep 10 ; rm file.txt    #10秒后删除

sleep 10是表示暂停10秒
默认sleep后面数值表示“秒” , m 表示分钟h表示小时 , d表示天

touch file.txt ; sleep 10m ; rm file.txt #10分钟后删除

&&和|| 符号

这2个在编程语言一般称为“逻辑与”和 “逻辑或” 符号 ,&&及|| 和分号一样,用于分割2个命令,使得命令依次执行
  • && : &&前的命令执行成功,才会执行后面的命令
  • || : ||前的命令执行失败才会执行后面的命令
  • 分号 : 不论分号前的命令执行成功与否,都户执行分号后的命令

crontab命令

定时执行程序 用来读取和修改名为crontab的文件,包含了要定时执行的程序列表,at命令只能执行一次,crontab可以重复执行名,例如每小时,每分钟,每天,每个星期等等..

安装crontab

//在Cetnos(Red Hat一族)中安装
sudo yum install vixie-cron crontabs     #安装crontab
chkconfig crond on                               #设为开机自启动
service crond start                                #启动

//在Ubuntu(Debian一族)中安装
sudo apt install cron                         #安装crontab
service cron retart 或者 restart cron     #重启crontab
  • 实际上有2个命令,一个叫 crontab ,一个叫 cron
  • crontab 用于修改crontab文件, cron用于实际执行定时的程序

主要3个参数

  • -l : 显示crontab文件
  • -e : 修改crontab文件
  • -r : 删除crontab文件

修改crontab格式

m h dom mon dow command

  • m : minute的缩写, 表示“分钟”
  • h : hour的缩写,表示“小时”
  • dom : day of month 的缩写,表示 “一个月的哪一天”
  • mon : month的缩写,表示“月份”
  • dow : day of week 的缩写,表示“星期几”
  • command : 英文“命令”,表示需要定时执行的命令

简单理解: 分时日月周

每天的22点10分都在家目录下创建file.txt 文件
10 22 * * *  touch ~/file.txt          #10表示分钟,22表示小时,其它3个区域是* 
每个小时的47分都执行command命令
47 * * * * command
每个礼拜一的凌晨都执行command命令
0 0 * * 1 command
每1分钟执行command命令 并写入日志进去
*/1 * * * *  echo "1111" >> /home/1.txt
每个月的1~15日的5点30分执行command命令
30 5 1-15 * * command 
每个礼拜一,礼拜三,礼拜四的凌晨执行command命令
0 0 * * 1,3,4 command 
每2个小时的整点(0,2,4,6 等等)都执行command命令
0 */2 * * * command 
每个礼拜1到礼拜5的每个10的倍数的分钟(0,10,20,30等等) 都执行command命令
*/10 * * * 1-5 command 
每30秒执行一次 (虽然最小值是分钟,可以利用sleep去进行操作)
* * * * * sleep 30; /home/run.sh

0 */2 * * * command 里的 */2 是2个倍数,意思就是每2个小时(2/4/6/8)
路径最好用绝对路径 , 因为你并不能确定cron命令执行这些语句的时候是否在哪个目录 , 上面 ~是代表家目录 。
如果语法正确的话,crontab会显示 crontab : installing new crontab 安装新的crontab文件

删除crontab文件

crontab -r

总结

  • date命令可以显示系统时间,可以按自定义格式显示,修改系统时间
  • at命令可以延迟执行程序,但它只能执行一次
  • 分号、&& 和|| 都可以用来连接多个命令 ,用于依次执行前后命令
  • sleep命令用于使前后2个命令执行之间隔一定时间
  • crontab命令用户定时执行程序,例如每天17点12分,每个礼拜2和礼拜3在12点,每个月的7号,等等..
  • 用crontab -e 来修改crontab程序
0

评论 (0)

取消