Linux中使用crontab实现定时任务调度(附案例)

cron 机制简介:

cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制。

开启与关闭 crontab 服务:

service crond start #启动crontab服务
service crond status #查看crontab服务状态
service crond stop #关闭crontab服务
service crond restart #重启crontab服务
service crond reload #重新载入配置

新增调度任务的两种方式:

  1. 在命令行输入: crontab -e 然后添加相应的任务,最后 wq存盘退出。 
  2. 直接编辑 /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文件,即可发现字符追加成功

猜你喜欢

转载自blog.csdn.net/qq_17685725/article/details/123487919