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命令查看一下发现刚才建立的任务已经不见了