cron 机制简介:
cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制。
开启与关闭 crontab 服务:
service crond start #启动crontab服务
service crond status #查看crontab服务状态
service crond stop #关闭crontab服务
service crond restart #重启crontab服务
service crond reload #重新载入配置
新增调度任务的两种方式:
- 在命令行输入: crontab -e 然后添加相应的任务,最后 wq存盘退出。
- 直接编辑 /etc/crontab 文件,即 vim /etc/crontab,添加相应的任务。
crontab -e 配置是针对某个用户的,而编辑 /etc/crontab 是针对系统的任务
查看调度任务:
- crontab -l ,列出当前的所有调度任务
- crontab -l -u jp ,列出用户jp的所有调度任务
删除调度任务 :
- crontab -r ,删除所有任务调度工作
- 直接编辑 vim /etc/crontab ,默认的文件形式如下:
vim /etc/crontab,crontab 文件的解释:
前四行是有关设置cron任务运行的环境变量。SHELL变量的值指定系统使用的SHELL环境(该样例为bash shell),PATH变量定义了执行命令的路径。Cron的输出以电子邮件的形式发给MAILTO变量定义的用户名。如果MAILTO变量定义为空字符串(MAILTO=""),电子邮件不会被发送。执行命令或脚本时HOME变量可用来设置基目录。
文件 /etc/crontab 中每行任务的描述格式如下:
minute hour day month dayofweek command(分时日月周)
minute - 从0到59的整数
hour - 从0到23的整数
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)
分布代表分 时 天 月 星期几 数值范围分别是 0-59: 0-23 :1-31: 1-12: 0-7
记住几个特殊符号的含义:
星号(*):代表所有可能的值,举个例子,在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线( / ):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
corn 时间表例子(分时日月周):
*/1 * * * * bin/sh root/1.sh #每1分钟执行一次 test .sh
0 */2 * * * bin/sh root/1.sh > out #每两小时执行一次test.sh并将结果存入out中
00 00 * * * bin/sh root/1.sh #每天的凌晨0:0分执行
30 21 * * * bin/sh root/1.sh #每天的21:30分执行
15 16 * * 1 command #每周一16:15 运行命令
00 12 1 * * command #每个月的1号的中午12:00点执行命令
00 8* * * if [date +%d -d tomorrow = 01 ] ; then ; command #个月的最后一天8点执行命令
可以用三字符的文本值(mon、tue、wed、thu、fri、sat、sun)或数值(0为周日,6为周六)
来指定dayofweek表项。
root表示以root用户身份来运行
run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本
对于以上各语句,星号(*)表示所有可用的值。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令。
整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4
指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。
符号“/”指定步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。
注意:
- */1 * * * * bin/sh /root/1.sh,得指定用bin/sh运行,否则运行.sh文件可能报错。
- */1 * * * * bin/sh /root/1.sh,用绝对路径,别用相对路径。
- chmod +x /root/1.sh,记得给文件添加可执行权限。
案例1:每分钟向 1.txt 追加一串字符
- 准备工作
mkdir /root/my_test touch /root/my_test/run.sh touch /root/my_test/1.txt chmod +x /root/my_test/run.sh
- 在linux终端输入:vim /root/my_test/run.sh,添加以下代码,并wq保存退出
#!/bin/bash output_path=/root/my_test/1.txt echo "123456789" >> $output_path
- 在linux终端输入:crontab -e,进入编辑界面,添加以下代码,并wq保存退出
*/1 * * * * /bin/sh /root/my_test/1.sh
- 耐心等待1分钟,随后打开1.txt文件,即可发现字符追加成功