定时任务crontab
1、crontab是比较常用的定时任务
查看系统是否有没有crontab
没有的话yum -y install crond
/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
2、查看当前用户是否有定时任务
crontab -l
如果想查看其他用户的定时任务则加选项 -u 后接用户名
其它选项:
-e ##进入任务编辑界面
-r ##清楚定时任务
3、语法
* * * * * command
第一部分表示分钟(0-59),* 表示每分钟
第二部分表示小时(0-23),* 表示每小时
第三部分表示日(1-31), * 表示每天
第四部分表示月(1-12), * 表示每月
第五部分表示周几(0-6,0表示周日),* 表示一周中每天
第六部分表示要执行的任务
举例: */2 12-15 2-7,15-22 6-9 * command
上任务时间解释为:6至9月,的2号到7号和15号到22号,的13点到15点,每隔2分钟执行命令!
4、可以了解一下crontab的规则
执行环境的环境和时间规则等等。。。
5、举例来理解crontab怎么创建定时任务的(这里执行的是shell脚本)
1️⃣创建一个shell脚本
vim hello.sh
#!/bin/bash
#file
echo "hello,world" >> /opt/shell/a.txt
特别简单的命令,应该很好理解吧。现在就一个脚本
2️⃣
crontab -e
编辑任务;
55 21 21 08 * /bin/bash /opt/shell/hello.sh
就这一行命令,一行命令代表一个任务.
接下来就等到时间的时候是否目录下创建了文件a.txt并且查看其内容。。。。。。。。。。。。。。。。。。。。到时间了
成功了哦。
定时timers
timers主要可以精确到秒,crond只能精确到分钟;timers主要基于systemd执行的,举例说明吧。
1️⃣以Apache为例 没有的话
yum -y install httpd
查看httpd状态
systemctl status httpd没有启动,红框里可以看到httpd服务的启动是靠文件httpd.service启动的
2️⃣
进入
cd /usr/lib/systemd/system/
创建定时任务文件,必须是这个路径下
vim httpd.timers
[Unit]
Description= my httpd start file
[Timer]
OnCalendar=2019-8-22 12:00:00
Unit=httpd.service
第一行:描述文件信息
第二行:执行时间
第三行:依据的启动文件
其他一些元素之后会扩展一点;
[Unit] 标签下指定了不依赖于特定类型的通用配置信息,比如例子中两个文件都指定了一个选项Description=表示描述信息。
[Timer]标签中可以指定多种单调定时器,所谓"单调时间"的意思是从开机那一刻(零点)起, 只要系统正在运行,该时间就不断的单调均匀递增(但在系统休眠时此时间保持不变),永远不会往后退,并且与时区也没有关系。 即使在系统运行的过程中,用户向前/向后修改系统时间,也不会对"单调时间"产生任何影响。包括:
OnActiveSec= 表示相对于本单元被启用的时间点
OnBootSec= 表示相对于机器被启动的时间点
OnStartupSec= 表示相对于systemd被首次启动的时间点
OnUnitActiveSec= 表示相对于匹配单元(本标签下Unit=指定的单元)最后一次被启动的时间点
OnUnitInactiveSec= 表示相对于匹配单元(本标签下Unit=指定的单元)最后一次被停止的时间点
[Timer]标签下还可以设置基于挂钟时间(wall clock)的日历定时器OnCalendar=,所谓"挂钟时间"是指真实世界中墙上挂钟的时间, 在操作系统中实际上就是系统时间,这个时间是操作系统在启动时从主板的时钟芯片中读取的。由于这个时间是可以手动修改的,所以,这个时间既不一定是单调递增的、也不一定是均匀递增的。其时间格式可以是:
Thu,Fri 2012-*-1,5 11:12:13 #表示2012年任意月份的1日和5日,如果是星期四或星期五,则在时间11:12:13执行
*-*-* *:*:00 #表示每分钟
*-*-* 00:00:00 #表示每天
*-01,07-01 00:00:00 #表示每半年
*:0/15 #表示每15分钟
12,14,13:20,10,30 #表示12/13/14点的10分、20分、30分
Mon,Fri *-01/2-01,03 *:30:45 #表示任意年份奇数月份的1日和3日,如果是周一或周五,则在每小时的30分45秒执行
3️⃣查看状态
systemctl start httpd.timer
我们等到12点再看一下吧
成功的。
自定义服务,定时任务
1️⃣cd /opt/shell/
创建一个脚本
加权:
chmod a+x hello.sh
切换到/usr/lib/systemd/system目录,创建自定义服务
vim a.service
[Unit]
Description=shell echo
[Service]
Type=simple
ExecStart=/opt/shell/hello.sh
vim a.timer
[Unit]
Description=hello.sh
[Timer]
OnCalendar=2019-08-22 16:10:00
Unit=a.service
保存并退出;
等待16:10。。。。。。
成功的!!!!
希望自己永远是个大男孩,加油!