• linux下crontab定时执行本地脚本和定时访问指定url


    http://www.cnblogs.com/intval/p/5763929.html

    https://my.oschina.net/u/2487410/blog/683308

    http://www.cnblogs.com/maybo/p/5183753.html

    使用linux curl命令讲解:http://www.linuxdiyf.com/linux/2800.html

    [root@jiangbo ~]# crontab -e
    crontab: installing new crontab
    You have new mail in /var/spool/mail/root
    [root@jiangbo ~]# crontab -l
    */1 * * * * /usr/bin/curl http://localhost/xiaochu/openApi/calCrown.php
    You have new mail in /var/spool/mail/root
    [root@jiangbo ~]# crontab -e
    crontab: installing new crontab
    You have new mail in /var/spool/mail/root
    [root@jiangbo ~]# crontab -l
    0 0 * * * /usr/bin/curl http://localhost/xiaochu/openApi/calCrown.php
    [root@jiangbo ~]#

    crontab: installing new crontab
    [root@jiangbo ~]# crontab -l
    */1 * * * * /usr/bin/curl -s http://localhost/xiaochu/openApi/calCrown.php >> /var/www/html/crownlog.txt 2>&1
    [root@jiangbo ~]#

    把php输出重定向到 crownlog.txt中 >>为追加模式 >为清空模式

    */1 * * * * /usr/bin/curl -s http://localhost/xiaochu/openApi/calCrown.php >> /var/www/html/crownlog.txt 2>&1

    curl -s/--slient 减少输出的信息,比如进度

    关于 >/dev/null 2>&1 的解释:

    0表示键盘输入

    1表示标准输出

    2表示错误输出.

    我们首先创建test.sh脚本如下:

    #! /bin/sh

    echo "hello, everybody, now is " `date`

    date >> test.txt

    然后添加作业

    * * * * * /home/oracle/test.sh >/home/oracle/log.txt & 默认值为1,即和下面命令一致

    * * * * * /home/oracle/test.sh 1>/home/oracle/log.txt &

    * * * * * /home/oracle/test.sh 2>/home/oracle/log.txt &

    * * * * * /home/oracle/test.sh 2>/home/oracle/log.txt 2>&1 &

    1,2将tesh.sh 命令输出重定向到log.txt, 即输出内容不打印到屏幕上,而是输出到log.txt文件中。如果你需要追加而不是覆盖,可以用 >>代替>

    2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件log.txt。

    &1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

    shell中可能经常能看到:>/dev/null 2>&1 

    命令的结果可以通过%>的形式来定义输出 

    /dev/null 代表空设备文件 
    > 代表重定向到哪里,例如:echo "123" > /home/123.txt 
    1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 
    2 表示stderr标准错误 
    & 表示等同于的意思,2>&1,表示2的输出重定向等同于1 

    那么本文标题的语句: 
    1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。 
    2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。 
    A. 1> /dev/null 表示将命令的标准输出重定向到 /dev/null2>/dev/null 表示将命令的错误输出重定向到 /dev/null1 - denotes stdout ( standard output )2 - denotes stderr  ( standard error )/dev/null就相当与windows里的回收站,只是进去了不能再出来了。>/dev/null 就是将标准输出和标准出错的信息屏蔽不显示 
    B.>/dev/null 2>&1   also can write  as  1>/dev/null 2>&1     - stdout redirect to /dev/null (no stdout) ,and redirect stderr to stdout  (stderr gone as well) . end up it turns both stderr and stdout off 
    C.a little practice may help to undstand above .  #ls /usr  /nothing #ls /usr  /nothing  2>/dev/null #ls /usr  /nothing  >/dev/null 2>&1 

    我们经常会在UNIX系统下的一些脚本中看到类似”2>&1″这样的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具体含义是什么呢? 
      UNIX有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。”2>&1″的意思就是将stderr重定向至stdout,并一起在屏幕上显示出来。如果不加数字,那么默认的重定向动作是针对stdout(1)的,比如”ls -l > result”就等价于”ls -l 1 > result”。这样便于我们更普遍性的理解重定向过程。 
      下面举例说明: 
    #cat std.sh 
    #!/bin/sh 
    echo “stdout” 
    echo “stderr” >&2 

    #/bin/sh std.sh 2>&1 > /dev/null 
    stderr 

    #/bin/sh std.sh > /dev/null 2>&1 

      第一条命令的输出结果是stderr,因为stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍将在屏幕中显示出来;第二条命令无输出,因为当stdout重定向至/dev/null后,stderr又重定向到了stdout,这样stderr也被输出到了/dev/null。 

    5.使用实例

    实例1:每1分钟执行一次command
    命令:
    * * * * * command 或者*/1 * * * * command

    如果是每五分钟执行一次可改为:
    */5 * * * * /home/dbbackup/db2backup.sh backup

    实例2:每小时的第3和第15分钟执行
    命令:
    3,15 * * * * command

    实例3:在上午8点到11点的第3和第15分钟执行
    命令:
    3,15 8-11 * * * command

    实例4:每隔两天的上午8点到11点的第3和第15分钟执行
    命令:
    3,15 8-11 */2 * * command

    实例5:每个星期一的上午8点到11点的第3和第15分钟执行
    命令:
    3,15 8-11 * * 1 command

    实例6:每晚的21:30重启smb 
    命令:
    30 21 * * * /etc/init.d/smb restart


    实例7:每月1、10、22日的4 : 45重启smb 
    命令:
    45 4 1,10,22 * * /etc/init.d/smb restart


    实例8:每周六、周日的1 : 10重启smb
    命令:
    10 1 * * 6,0 /etc/init.d/smb restart


    实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb 
    命令:
    0,30 18-23 * * * /etc/init.d/smb restart


    实例10:每星期六的晚上11 : 00 pm重启smb 
    命令:
    0 23 * * 6 /etc/init.d/smb restart


    实例11:每一小时重启smb 
    命令:
    * */1 * * * /etc/init.d/smb restart


    实例12:晚上11点到早上7点之间,每隔一小时重启smb 
    命令:
    * 23-7/1 * * * /etc/init.d/smb restart

    实例13:每月的4号与每周一到周三的11点重启smb 
    命令:
    0 11 4 * mon-wed /etc/init.d/smb restart

    实例14:一月一号的4点重启smb 
    命令:
    0 4 1 jan * /etc/init.d/smb restart


    实例15:每小时执行/etc/cron.hourly目录内的脚本
    命令:
    01 * * * * root run-parts /etc/cron.hourly

    实例16:如何设定crontab在每月最后一天执行一种方法:
    for Linux
     0 8 28-31 * * [ `date -d tomorrow +\%e` -eq 1 ] && (shell script)
     for other Unix,BSD
     0 8 28-31 * * [ `echo \`cal\` | awk '{print $NF}'` -eq 1 ] && (shell script)

     `date -d tomorrow +\%e` 这是一句命令,返回几号
    [ x -eq 1]x号数与1比较是否相等
    其中的应该是转义字符,

    0 0 * * * /usr/bin/curl -s http://localhost/xiaochu/openApi/calCrown.php >> /var/www/html/crownlog.txt 2>&1 每天0点0分执行
    59 23 * * * /usr/bin/curl -s http://www.k7wan.com/studio.php?action=updatestudiodata&type=d >> /var/www/pttuicd/studio.txt 2>&1 每天23点59分执行

    //每月执行不好使,所以改成在php里判断是不是最后一天
    0 22 28-31 * * [`date -d tomorrow +\%e` -eq 1]&& /usr/bin/curl -s http://www.k7wan.com/studio.php?action=updatestudiodata&type=m >> /var/www/pttuicd/studio.txt 2>&1 每月28-31号 最后一天 22点0分执行

    另一种方法:
     单独靠crontab判断比较复杂,所以把判断部分写到执行脚本中
    #!/bin/bash
     today=`date +%d`
     last_day=`cal | xargs | awk '{print $NF}'`
     if [ "$today" != "$last_day" ];then   
      exit 1
     fi
     ....  # other codes start from here

       通过脚本实现的:
    crontab里设定一条:
    0 12 28-31 * * sh /tmp/start.sh
    start.sh 脚本如下:
    ******************************************************************************
    #!/usr/bin/ksh
    #this script is used to start the xxx in the last day of every month
    ym=`date +%m" "%Y`
    if [ `date +%d` = `cal $ym|xargs|awk '{print $NF}'` ]
    then
    sh yourscripts
    fi
    ********************************************************************************

  • 相关阅读:
    sqlserver查询某个数据库有多少个表 ,存过,函数,视图
    C# 金额转为大写金额
    C# TextBox中只能输入数字的几种常用方法(C#)
    C# 设置Excel单元格属性
    MS SQL 维护小记
    webapi demo
    远程 TeamViewer
    https://github.com/
    C# Fun 类似委托
    技术点文章收集
  • 原文地址:https://www.cnblogs.com/as3lib/p/6064307.html
Copyright © 2020-2023  润新知