zoukankan      html  css  js  c++  java
  • linux下使用crontab定时执行脚本

    使用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-cron
    yum 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用来测试(作为日志打印输出文件)。

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

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

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

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

    crontab mytest.cron

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

    step4:"service crond status"

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

     

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

    实例2:

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

    主要日志文件如下:

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

    使用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结尾的文件内容。

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

    crontab clearLogs.cron

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

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

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

  • 相关阅读:
    软件专利申请流程
    GitLab的权限管理及Merge Request
    git clone指定branch或tag
    pom.xml activatedProperties --spring.profiles.active=uat 对应
    Alpine容器中运行go的二进制文件
    在 Alpine Linux 中安装 bash shell
    mysql 大小写不敏感
    PB级数据实时查询,滴滴Elasticsearch多集群架构实践
    top命令输出解释以及load average 详解及排查思路
    你真的了解java的lambda吗?- java lambda用法与源码分析
  • 原文地址:https://www.cnblogs.com/hustzzl/p/8878664.html
Copyright © 2011-2022 走看看