一、简介
定时任务与shell脚本的搭配可以实现很多令人轻松的功能。让机器按照人的意志定时去做事,绝对是让人愉悦的事情!
先说crond。crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似。
Linux下的任务调度分为两类,即系统任务调度和用户任务调度。
(1)系统任务调度
系统任务调度,是面向全局的功能。不受用户限制,持续执行定时任务。
因为是面向全局,不要考虑限制,所以构造更加简单。
系统任务调度的文件是存在于/etc目录下crontab文件中,因此只要直接在该文件中增加工作任务即可。
(2)用户任务调度
用户任务调度,仅仅是面向用户的功能。由一般用户设置定时任务,相较于系统任务则是存在较多不同。不仅是增加了权限限制,而且crontab存放的位置也不同。具体如下:
使用者权限文件
在目录etc下有两个文件
cron.deny # 该文件中所列用户不允许使用crontab命令
cron.allow # 该文件中所列用户允许使用crontab命令
用户crontab文件的存放目录
/var/spool/cron/ # 所有用户crontab文件存放的目录,文件名与用户名一致。
二、crond服务
一般情况下安装完成操作系统,会默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
查看状态
service crond status
启动crond
service crond start
关闭crond
service crond stop
三、crond格式
系统调度的任务一般存放在/etc/crontab这个文件下,里面存放了一些系统运行的调度程序。
使用命令:
cat /etc/crontab
SHELL=/bin/bash # 第一行SHELL变量指定了系统要使用哪个shell,这里是bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin # 第二行PATH变量指定了系统执行 命令的路径
MAILTO=root # 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,,如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户
# For details see man 4 crontabs
# 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、查看定时任务
crontab -l
2、编辑定时任务
crontab -e
3、删除定时任务
crontab -r
4、实操说明
* * * * * command
等价
minute hour day month week command
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
实用案例
案例1:每1分钟执行一次command
* * * * * command
案例2:每小时的第15和第30分钟执行一次command(,表示时间点)
15,30 * * * * command
案例3:在上午8点到11点的第15分钟执行(- 表示时间范围)
15 8-11 * * * command
案例4:每隔两天的上午8点到11点的第3和第15分钟执行(/ 表示时间间隔)
3,15 8-11 */2 * * command
案例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
案例6:每晚的21:30执行home目录下的test.sh脚本
30 21 * * * /bin/sh /home/test.sh
案例7:每月1、10、22日的4 : 45执行home目录下的test.sh脚本
45 4 1,10,22 * * /bin/sh /home/test.sh
案例8:每周六、周日的1 : 10执行home目录下的test.sh脚本
10 1 * * 6,0 /bin/sh /home/test.sh
案例9:每天18 : 00至23 : 00之间每隔30分钟执行home目录下的test.sh脚本
0,30 18-23 * * * /bin/sh /home/test.sh
案例10:每星期六的晚上11 : 00 pm执行home目录下的test.sh脚本
0 23 * * 6 /bin/sh /home/test.sh
案例11:每一小时执行home目录下的test.sh脚本
* */1 * * * /bin/sh /home/test.sh
案例12:晚上11点到早上7点之间,每隔一小时执行home目录下的test.sh脚本
* 23-7/1 * * * /bin/sh /home/test.sh
五、知识拓展
执行脚本的时候,一般会有几种不同的方式简单列举一下
source test.sh
./test.sh
sh test.sh
bash test.sh
有机会专门总结一下关于shell脚本的编写和执行,这里就不继续发挥了。这里重点说一下sh和bash
sh和bash都是shell的解释器,在linux环境中/bin 目录下存在相应的应用程序。
sh是通过软链接指向bash的。
通过命令:
ll -r
可以看到:
sh -> bash
结论就是sh 和bash 执行脚本完全等价。
sh test.sh
等价
bash test.sh