zoukankan      html  css  js  c++  java
  • linux 定时执行 cron指令

    linux 中的 cron 定时执行命令,先上例子:
    每间隙两分钟把 "Hello world"写到 /tmp/hello.txt

    crontab -e
    */2 * * * * echo "Hello world" >> /tmp/hello.txt

    以下开始
    先检查是否安装,如果没有安装,则安装
    用 find 查看一下,然后判定该服务是否在运行,
    使用 /sbin/service crond status 命令

    如果没有安装,则先安装
    以centos为例

    yum -y install vixie-cron
    yum -y install crontabs
    

    运行:

    service crond start

    停止:

    service crond stop
    

    cron 服务每分钟不仅要读一次/var/spool/cron内的所有文件,

    还需要读一次/etc/crontab,
    因此我们配置这个文件也能运用cron服务做一些事情。
    用crontab配置是针对某个用户的,
    而编辑/etc/crontab是针对系统的任务。

    /etc/crontab文件的文件格式如下:
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
    HOME=/ //使用者运行的路径,这里是根目录

    # run-parts 01 * * * * root
    # run-parts /etc/cron.hourly 02 4 * * * root
    # run-parts /etc/cron.daily 22 4 * * 0
    # root run-parts /etc/cron.weekly 42 4 1 * * root
    # run-parts /etc/cron.monthly

    cron 是一个可以用来根据时间、日期、月份、星期的组合
    来调度对重复任务的执行的守护进程。

    cron 的主配置文件是 /etc/crontab,它包括下面几行:

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/

    前四行是用来配置 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 — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也
    可以是执行你自行编写的脚本的命令。)

    在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号
    意味着在满足其它制约条件后每月都执行该命令。

    整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。
    用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的
    整数。

    正斜线(/)可以用来指定间隔频率。在范围后加上 /<integer> 意味着在范围内
    可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率
    值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行
    一次任务。
    开头为井号(#)的行是注释,不会被处理。

    如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行
    /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly
    目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中
    的文件应该是 shell 脚本。

    如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执
    行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和
    /etc/crontab 中一样的语法。

    crontab 的例子1:

    根用户以外的用户可以使用 crontab 工具来配置 cron 任务。
    所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,
    并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,
    登录为该用户,然后键入 crontab -e 命令,
    使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。
    该文件使用的格式和 /etc/crontab 相同。
    当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,
    并写入文件 /var/spool/cron/username 中。
    cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、
    以及 /var/spool/cron 目录中的改变。如果发现了改变,
    它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护
    进程了。

    控制对 cron 的使用2:

    /etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。
    这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。
    如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
    使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
    无论使用控制文件中的规定如何,根用户都总是可以使用 cron。
    如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,
    并且 cron.deny 文件会被忽略。
    如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用
    cron。

    启动和停止服务

    要启动 cron 服务,使用 /sbin/service crond start 命令。要停止该服务,
    使用 /sbin/service crond stop 命令。推荐你在引导时启动该服务。

    Crontab使用详解
    先来个测试的例子,每间隙两分钟写把 hello world写到/tmp/hi文件中
    crontab -e
    输入
    */2 * * * * echo "hello world." >> /tmp/hi.txt

    名称 : crontab
    使用权限 : 所有使用者
    使用方式 :
    crontab file [-u user]-用指定的文件替代目前的crontab。
    crontab-[-u user]-用标准输入替代目前的crontab.
    crontab-1[user]-列出用户目前的crontab.
    crontab-e[user]-编辑用户目前的crontab.
    crontab-d[user]-删除用户目前的crontab.
    crontab-c dir- 指定crontab的目录。
    crontab文件的格式:M H D m d cmd.
    基本格式 :
    *  *  *  *  *  command
    分  时  日  月  周  命令
    M: 分钟(0-59)。每分钟用*或者 */1表示
    H:小时(0-23)。(0表示0点)
    D:天(1-31)。
    m: 月(1-12)。
    d: 一星期内的天(0~6,0为星期天)。
    cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环
    境变量

    说明 :
    crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是
    类似使用者的时程表。
    -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是
    root)才能够指定他人的时程表。
    如果不使用 -u user 的话,就是表示设定自己的时程表。

    参数 :
    crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想
    用别的文字编辑器,
    则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL
    joe)
    crontab -r : 删除目前的时程表
    crontab -l : 列出目前的时程表
    crontab file [-u user]-用指定的文件替代目前的crontab。
    时程表的格式如下 :
    f1 f2 f3 f4 f5 program
    其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份
    ,f5 表示一个星期中的第几天。program 表示要执行的程序。
    当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程
    序,其馀类推
    当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时
    表示从第 a 到第 b 小时都要执行,其馀类推
    当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时
    个时间间隔执行一次,其馀类推
    当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,...
    时表示第 a, b, c...个小时要执行,其馀类推
    使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设
    定时程表。

    例子 :
    #每天早上7点执行一次 /bin/ls :
    0 7 * * * /bin/ls
    在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次
    /usr/bin/backup :
    0 6-12/3 * 12 * /usr/bin/backup

    周一到周五每天下午 5:00 寄一封信给 lin3615@lin3615.com :
    0 17 * * 1-5 mail -s "hi" lin3615@lin3615.com < /tmp/maildata
    每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
    20 0-23/2 * * * echo "haha"
    =====================================
    以下是用来执行PHP脚本和mysql数据库自动备份

    执行php脚本时,在nginx中执行 php文件,两分钟执行一次
    /usr/local/nginx/html/test.php
    可以在 crontab中写,以下是 nginx下的php文件,
    其中test.php文件中可以包含别的文件,php-fpm的路径一定要正确

    */2 * * * * /usr/local/bin/php-fpm /usr/local/nginx/html/test.php

    apache下可以是这样,test.php中可以包含别的文件:

    */2 * * * * /usr/local/bin/php /usr/local/apache2/htdocs/test/test.php

    还可以用 url访问,但是要安装 lynx,
    假如lynx是安装在 /usr/bin/lynx,
    则(可以包含其中的文件:)

    */2 * * * * /usr/bin/lynx -source http://www.lin3615.net/test.php

    还可以把 .php文件放在非web目录下,
    如 /usr/local/下, test.php (可以包含其中的文件):

    */2 * * * * /usr/local/bin/php /usr/local/test.php

    备份mysql数据库
    第一步:在服务器上配置备份目录代码

    mkdir /var/lib/mysqlbackup
    cd /var/lib/mysqlbackup 

    第二步:编写备份脚本代码:

    vim dbbackup.sh 


    粘帖以下代码,更改其中的username,password和dbname,mysqldump的路径一定要正确,绝对路径,可用 find 找 mysqldump

    #!/bin/sh
    /绝对路径/mysqldump -uuser -ppassword dbname | gzip > /var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.sql.gz
    cd /var/lib/mysqlbackup
    rm -rf `find . -name '*.sql.gz' -mtime 10` #删除10天前的备份文件

    第三步:更改备份脚本权限

    chmod +x dbbackup.sh

    第四步:用crontab定时执行备份脚本代码

    crontab -e

    若每天晚上01点00备份,添加如下代码,

    00 01 * * * /var/lib/mysqlbackup/dbbackup.sh
  • 相关阅读:
    LoadRunner ---手动关联与预关联
    Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "124.202.213.70" failed: [10054] Connection reset by peer [MsgId: MERR-27780]
    LR录制https协议报证书错误,导航已阻止
    python sort和sorted的区别以及使用方法
    python 操作exls学习之路1-openpyxl库学习
    python json学习之路2-认识python种的json模块
    python json学习之路1-认识json格式数据
    磁盘性能测试学习之路2-测试磁盘性能工具的选择
    磁盘性能测试学习之路1-认识磁盘的各项参数
    飞机进度条
  • 原文地址:https://www.cnblogs.com/lin3615/p/4513516.html
Copyright © 2011-2022 走看看