首页 技术 正文
技术 2022年11月8日
0 收藏 466 点赞 1,529 浏览 2366 个字

使用crontab定时执行脚本

cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务:

crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。 
crontab –l : 显示 crontab 文件。 
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。

执行以上命令的时候,若遇到“crontab command not found”错误,这是因为软件包没有安装

crontab 要安装两个软件包:   vixie-cron 及 crontabs直接执行 yum install vixie-cronyum install crontabs(这句可能不需要,但是你也可试试)即可解决.

在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:

minute hour day-of-month month-of-year day-of-week commands  
分钟   小时   天   月   星期   要执行的命令
前面五个参数中间用空格隔开,最后是要执行的命令。

合法值为:00-59 00-23 01-31 01-12 0-6 (0 is sunday)

除了数字还有几个特殊的符号:”*”、”/”和”-“、”,”

  • *代表所有的取值范围内的数字
  • “/”代表每的意思,”/5″表示每5个单位
  • “-“代表从某个数字到某个数字
  • “,”分开几个离散的数字

注:commands 注意以下几点

  • 要是存在文件,要写绝对路径
  • 即使是打印也不会显示在显示屏,在后台运行,最好重定向日志

实例1:

(写一个定时任务,每分钟往test.txt文件写入一个”good”字符串)

step1:写cron脚本文件,命名为mytest.cron。

使用touch命令创建两个文件,mytest.cron作为脚本文件,test.txt用来测试(作为日志打印输出文件)。

linux下使用crontab定时执行脚本

linux下使用crontab定时执行脚本

使用vi命令编辑mytest.cron文件。写入以下内容:

*/1 * * * * echo “good” >> /export/Domains/yy.embed.jd.com/server1/logs/test.txt

表示每分钟,执行一次打印命令,往test.txt文件里写入一个

linux下使用crontab定时执行脚本

linux下使用crontab定时执行脚本

step2:添加定时任务。执行命令

crontab mytest.cron

linux下使用crontab定时执行脚本

step3:”crontab -l” 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本

linux下使用crontab定时执行脚本

step4:”service crond status”

Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序
使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 service crond start启动它,启动命令“service crond start”。

linux下使用crontab定时执行脚本

使用cat命令查看test.txt文件,结果:

linux下使用crontab定时执行脚本

实例2:

(本人公司测试环境磁盘较小,系统日志打印较多,时间一长,磁盘打满,应用挂掉。针对这种情况,写一个定时任务,定期清理测试环境的系统日志,避免日志打满的情况出现导致应用挂掉。)

主要日志文件如下:

linux下使用crontab定时执行脚本

step1:写cron脚本文件,命名为clearLogs.cron。

linux下使用crontab定时执行脚本

使用vi命令编辑clearLogs.cron文件。写入以下内容:

50 23 * * * for i in `find /export/Domains/yy.embed.jd.com/server1/logs/ -name “*.log”`; do cat /dev/null >$i; done
50 23 * * * for i in `find /export/Domains/yy.embed.jd.com/server1/logs/ -name “*.out”`; do cat /dev/null >$i; done
50 23 * * * for i in `find /export/Domains/worker.embeddedins.jd.local/server1/logs/ -name “*.log”`; do cat /dev/null >$i; done
50 23 * * * for i in `find /export/Domains/worker.embeddedins.jd.local/server1/logs/ -name “*.out”`; do cat /dev/null >$i; done

表示天的23点50分,执行4个清除命令,分别为清掉/export/Domains/yy.embed.jd.com/server1/logs目录下所有以log结尾的文件内容、清掉/export/Domains/yy.embed.jd.com/server1/logs目录下所有以out结尾的文件内容、清掉/export/Domains/worker.embeddedins.jd.local/server1/logs目录下所有以log结尾的文件内容、清掉/export/Domains/worker.embeddedins.jd.local/server1/logs目录下所有以out结尾的文件内容。

linux下使用crontab定时执行脚本

step2:添加定时任务。执行命令

crontab clearLogs.cron

step3:”crontab -l” 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本

linux下使用crontab定时执行脚本

以上便可定时清理磁盘日志文件。

实例2里一个文件中使用了多个定时、多个命令,使用crontab执行多个命令时,还有很多其他写法。比如只写一个定时,后面的命令写在一行,命令与命令之间用“;”分号隔开。例如实例2中的每一行命令,其实是3个命令写在一起。把上述12个命令全部写1行也是可以的。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,291