感谢支持
我们一直在努力

Linux Crontab 定时任务图文详述

Linux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本,非常复杂的指令也没有问题。

cron介绍

我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。

  • /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
  • /etc/crontab 这个文件负责调度各种管理和维护任务。
  • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。

crontab的使用

        我们常用的命令如下:

crontab [-u username]    //省略用户表表示操作当前用户的crontab
   -e      (编辑工作表)
   -l      (列出工作表里的命令)
   -r      (删除工作作)

        我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。

crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有

* 取值范围内的所有数字

/ 每过多少个数字

– 从X到Z

,散列数字

        具体的用cat /etc/crontab可以看一下它的配置文件,可以看到代码的具体格式跟要求就跟下面一样

# Example of job definition:
# .—————- minute (0 – 59)
# |  .————- hour (0 – 23)
# |  |  .———- day of month (1 – 31)
# |  |  |  .——- month (1 – 12) OR jan,feb,mar,apr …
# |  |  |  |  .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

实例

实例1:每1分钟执行一次myCommand

* * * * * myCommand

实例2:每小时的第3和第15分钟执行

3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

        下面就具体实验一下这个命令把!

        首先使用date命令获取一下当前的系统时间,已经获取到了系统的时间19时5分

        接下来使用crontab -e命令进入对定时工作列表的文件当中,是一个类似于vim编辑器的一个界面,这边没有加上u选项,如果想指定用户的话加上-u然后指定用户名.但前提是执行的命令不是以交互形式来执行命令,而且指定用户必须对执行的代码拥有执行权限,否则设置了等于没有设置.如果不指定用户名的话,系统默认实行用户为当前用户

        进入任务编辑菜单,我这边输入了一条任务.在每年每月每天的19:08分会在/tmp目录下面创建一个”123.txt”的文件,并且在当中输入一段话” i love you !”

        接下来使用crontab -l命令来检查一下刚才输入的任务,发现已经存在,接下来要做的就是等待时间的到来

        再次使用date命令查看了一下系统当前的时间,发现已经过去了好几分钟,使用vim /tmp/123.txt命令查看了已经刚才设定创建的文件.确实发现了这个文件并看见了当中输入的一段话”i love you!”,

   

        如果说要删除周期性任务的操作就是crontab -r注意是删除全部任务,如下图这边我随便创建了三个周期性的任务保存并退出.后使用crontab -r命令以后查看一下发现刚才创建的三个任务都已经被删除了.这边讲的是如果想删除所有任务的话请用这一条命令. 如果想删除一条任务的请使用crontab -e进入任务编辑模式,用vim的dd(删除行命令)把那一条不需要执行定时任务的代码删除即可

   

       上面一种周期性的定时任务设置,每当到这个时间节点的时候都会去执行这个任务,还有一种方法也是设置一个定时任务只能执行一次命令就是at,接下来继续做一个小实验. 利用at定时任务命令把刚才创建的123.txt文件删除 使用date命令获取了一下当前系统的时间19时31分,和确认了一下/tmp目录下的文件存在

        接下来使用at命令创建一个定时任务,任务格式是 时:分 年:月:日,我这边输入的是在2019年的8月24日19点35分删除/tmp目录下的123.txt文,件并在mnt目录下创建一个abc.txt文件,所有的命令输入完成后按”ctrl + d键”保存任务. 创建保存完成之后再使用atq命令检查了一下任务已经生成

        使用date命令获取到了系统时间已经过了35分,在使用ls /tmp命令查看了一下tmp目录发现原来的123.txt文件已经被删除,而abc.txt文件被创建了,这就是我们的试验结果

     

        而删除at创建的任务命令是atrm命令现在我们要创建一个任务然后去删除它. 下面就新建了一个任务,用atq命令查看了一下任务编号为4,接下来使用atrm 4把刚建立的4号任务删除,最后再使用atq命令查看一下发现刚才建立的任务已经不见了

赞(0) 打赏
转载请注明出处:服务器评测 » Linux Crontab 定时任务图文详述
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏