• Linux Crontab 定时任务


    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

    /sbin/service crond start    //启动服务
    /sbin/service crond stop //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload //重新载入配置

    你也可以将这个服务在系统启动的时候自动启动:

      在/etc/rc.d/rc.local这个脚本的末尾加上:

    /sbin/service crond start

    crontab 命令

    crontab file [-u user]              //用指定的文件替代目前的crontab。
    crontab -u[user]                    //指定要设定计时器的用户名称.
    crontab -l[user]                    //列出该用户的计时器设置 
    crontab -e[user]                    //编辑该用户的计时器设置 
    crontab -r[user]                    //删除该用户的计时器设置。 
    crontab -c dir                      //指定crontab的目录。 

    如:root查看自己的cron设置:crontab -u root -l
          root删除fred的cron设置:crontab -u fred -r

    第一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。


    命令行中-r选项的作用是从/var/spool/cron/crontabs目录下删除用户定义的文件crontab;

    crontab文件的格式:M H D m d cmd. 

    M: 分钟(0-59)。 
    H:小时(0-23)。
    D:天(1-31)。
    m: 月(1-12)。
    d: 一星期内的天(0~60 表示星期天)

      除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

    例子:

    #每天早上6点
    106* * * date

    #每两个小时
    0*/2* * * date

    #晚上11点到早上8点之间每两个小时,早上部点
    0 23-7/28* * * date

    #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
    0 11 4* mon-wed date

    #1月份日早上4点
    0 4 1 jan* date
    30 21* * * /apps/bin/cleanup.sh                     //每晚的21:30运行/apps/bin目录下的cleanup.sh。 
    45 4 1,10,22 * * /apps/bin/backup.sh //每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。
    10 1 * * 6,0 /bin/find -name "core" -exec rm {} ; //每周六、周日的1:10运行一个find命令。
    0,30 18-23 * * * /apps/bin/dbcheck.sh //在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh。
    0 23 * * 6 /apps/bin/qtrend.sh //每星期六的11:00 pm运行/apps/bin目录下的qtrend.sh。



    在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
    进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
    编辑/etc/crontab文件,在末尾加上一行: 30 5 * * * root init 6 这样就将系统配置为了每天早上5点30自动重新启动。

    每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这 个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

    在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序(还有cron.d/ cron.deny cron.monthly/ cron.weekly/ cron.daily/ cron.hourly/ crontab)。

    作业与它们预定的时间储存在文件/var/spool/cron/crontabs/username里。username使用户名,在相应的文件中存放着该用户所要运行的命令。

    /usr/lib/cron/cron.allow表示谁能使用crontab命令

      a) 如果它是一个空文件表明没有一个用户能安排作业。

      b) 如果这个文件不存在,而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。

      c) 如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时cron.allow优先,如果都不存在,只有超级用户可以安排作业。

    例1:以Linux下定时备份mysql为例说明下
    写一个简单的mysql备份shell脚本

    vi
    #!/bin/sh
    da=`date +%Y%m%d%H%M%S`
    mysqldump -u root -pdongjj --all-database>/root/mysqlbakup/$da

    保存为 mysqlbak.sh
    然后 crontab-e 0 3 * * * /root/mysqlbak.sh
    保存退出

    例2:让一个脚本自动定时运行

    [root@test1 init.d]# crontab -e

    在root文件后面添加一行(含义:每月的18日4:40分执行scott_select.sh)

    40 4 18 * * /oracle_backup/bin/scott_select.sh
    0 0 23 * * /patch to tranferfiles.sh >;tranferfiles.log

    设置完了之后不要忘了,启动定时服务(大多数忘了这里)

    [root@test1 init.d]# service crond stop
    [root@test1 init.d]# service crond start

    或者

    /etc/init.d/crontab start
  • 相关阅读:
    第三次作业
    Mysql show variables系统变量详解
    利用正则检测文中敏感词并标红
    Android 连接大疆SDK
    Android 热修复方案Tinker
    Hander消息机制
    .net MemCache 入门到简单使用链接汇总
    用socket连接pop3服务器遇到的小问题
    我是如何取得Reflector的真实程序的
    google卫星地图的url计算
  • 原文地址:https://www.cnblogs.com/shuaixf/p/2237267.html
Copyright © 2020-2023  润新知