【system】 linux下定时执行任务方法

来源:互联网 发布:魅力中国网络电视台 编辑:程序博客网 时间:2024/06/05 03:24
 linux下定时执行任务方法
 
 (1)at命令 (只为让特定任务运行一次)
         # at 2:05 tomorrow

  at>/home/kyle/do_job

  at> Ctrl+D

  AT Time中的时间表示方法

  -----------------------------------------------------------------------

  时 间 例子 说明

  -----------------------------------------------------------------------

  Minute at now + 5 minutes 任务在5分钟后运行

  Hour at now + 1 hour 任务在1小时后运行

  Days at now + 3 days 任务在3天后运行

  Weeks at now + 2 weeks 任务在两周后运行

  Fixed at midnight 任务在午夜运行

  Fixed at 10:30pm 任务在晚上10点30分

  注意:一定要检查一下atq的服务是否启 动,有些操作系统未必是默认启动的, linux默认为不启动,而ubuntu默认为启动的。检查是否启动,用service atd检查语法,用service atd status检查atd的状态,用service atd start启动atd服务。

  查看at执行的具体内容:一般位于/var/spool/at目录下面, 用vi打开,在最后一部分就是你的执行程序

 (2)crontab命令
         1.  键入 crontab  -e 编辑crontab服务文件、
         
      例如 文件内容如下:
      
           */2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh
      
     保存文件并并退出

          */2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh

          */2 * * * * 通过这段字段可以设定什么时候执行脚本

         /bin/sh /home/admin/jiaoben/buy/deleteFile.sh 这一字段可以设定你要执行的脚本,这里要注意一下bin/sh 是指运行  脚本的命令  后面一段时指脚本存放的路径

        2. 查看该用户下的crontab服务是否创建成功, 用 crontab  -l 命令  

        3. 启动crontab服务
            /sbin/service crond start //启动服务
      /sbin/service crond stop //关闭服务
      /sbin/service crond restart //重启服务
      /sbin/service crond reload //重新载入配置
      /sbin/service crond status //查看服务状态

         (crond或cron看实际情况
            service crond start #启动服务
            service crond stop #关闭服务
            service crond restart #重启服务
            service crond reload #重新载入配置)

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

      在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/service crond start
 
        4. 查看服务是否已经运行用 ps -ax | grep cron

        5. 直接用crontab命 令编辑

      cron服务提供 crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

      crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

      crontab -l //列出某个用户cron服务的详细内容

      crontab -r //删除某个用户的cron服务

      crontab -e //编辑某个用户的cron服务

      比如说root查看自己的cron设置:crontab -u root -l

      再例 如,root想删除fred的cron设置:crontab -u fred -r

      基本格式 :

      *  *  *  *  *  command

      分  时  日  月  周  命令

      第1列表示分钟1~59 每分钟用*或者 */1表示
    
      第2列表示小时1~23(0表示0点)

      第3列表示日期1~31

      第4列表示月份1~12

      第5列标识号星期0~6(0表示星期天)

      第6列要运行的命令

      crontab文件的一些例子:

      #每晚的21:30重启apache。

      30 21 * * * /usr/local/etc/rc.d/lighttpd restart

      #每月1、10、22日

      45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

      #每天早上6点10分

      10 6 * * * date

      #每两个小时

      0 */2 * * * date

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

      #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

      0 11 4 * mon-wed date

      #1月份日早上4点

        6. crontab命令选项:

     -u指定一个用户

     -l列出某个用户的任务计划

     -r删除某个用户的任务

     -e编辑某个用户的任务

        7. cron文件语法:

      分     小时    日       月       星期     命令

      0-59   0-23   1-31     1-12        0-6      command     (取值范围,0表示周日一般一行对应一个任务)

     记住几个特殊符号的含义:

         “*”代表取值范围内的数字,
         “/”代表”每”,
         “-”代表从某个数字到某个数字,
         “,”分开几个离散的数字

        8. 任务调度设置文件的写法
      可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
      具体格式如下:
      Minute Hour Day Month Dayofweek   command
      分钟     小时   天     月       天每星期       命令
      每个字段代表的含义如下:
      Minute             每个小时的第几分钟执行该任务
      Hour               每天的第几个小时执行该任务
      Day                 每月的第几天执行该任务
      Month             每年的第几个月执行该任务
      DayOfWeek     每周的第几天执行该任务
      Command       指定要执行的程序
      在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选

        字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
        举例如下:
            5       *       *           *     *     ls             指定每小时的第5分钟执行一次ls命令
        30     5       *           *     *     ls             指定每天的 5:30 执行ls命令
        30     7       8         *     *     ls             指定每月8号的7:30分执行ls命令
        30     5       8         6     *     ls             指定每年的6月8日5:30执行ls命令
        30     6       *           *     0     ls             指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

            以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
    
           30     3     10,20     *     *     ls     每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

            25     8-11 *           *     *     ls       每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

        */15   *       *           *     *     ls         每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

         30   6     */10         *     *     ls       每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

         每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

         50   7       *             *     *     root     run-parts     /etc/cron.daily   [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

        9. 新增调度任务

         新增调度任务可用两种方法:
       1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
       2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

        10. 查看调度任务
        crontab -l //列出当前的所有调度任务
        crontab -l -u jp   //列出用户jp的所有调度任务
        
        11. 删除任务调度工作
         crontab -r   //删除所有任务调度工作

        12. 任务调度执行结果的转向
       例1:每天5:30执行ls命令,并把结果输出到/jp/test文件中
            30 5 * * * ls >/jp/test 2>&1
            注:2>&1 表示执行结果及错误信息。
      编辑/etc/crontab 文件配置cron  

         cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次 /etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用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         //每小时执行

      /etc/cron.hourly内的脚本  

         02   4   *   *   *     root run-parts /etc/cron.daily           //每天执行/etc/cron.daily内的脚本  

       22   4   *   *   0     root run-parts /etc/cron.weekly       //每星期执行 /etc/cron.weekly内的脚本  

          42   4   1   *   *     root run-parts /etc/cron.monthly     //每月去执行/etc/cron.monthly内的脚本  
      大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了

        例如:

         1) 在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

      2)直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务
          11 2 21 10 * rm -rf /mnt/fb  
          
 (3)chmod 命令
 
         chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。

  该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

  1. 文字设定法

  chmod [who] [+ | - | =] [mode] 文件名¼

  命令中各选项的含义为:

  操作对象who可是下述字母中的任一个或者它们的组合:

  u 表示“用户(user)”,即文件或目录的所有者。

  g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。

  o 表示“其他(others)用户”。

  a 表示“所有(all)用户”。它是系统默认值。

  操作符号可以是:

  + 添加某个权限。

  - 取消某个权限。

  = 赋予给定权限并取消其他所有权限(如果有的话)。

  设置mode所表示的权限可用下述字母的任意组合:

  r 可读。

  w 可写。

  x 可执行。

  X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。

  s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。

  t 保存程序的文本到交换设备上。

  u 与文件属主拥有一样的权限。

  g 与和文件属主同组的用户拥有一样的权限。

  o 与其他用户拥有一样的权限。

  文件名:以空格分开的要改变权限的文件列表,支持通配符。

  在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example

  使同组和其他用户对文件example 有读权限。

  2. 数字设定法

  我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

  例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

  数字设定法的一般形式为:

  chmod [mode] 文件名¼

  例子:

  (1)文字设定法:

  例1:$ chmod a+x sort

  即设定文件sort的属性为:

  文件属主(u) 增加执行权限

  与文件属主同组用户(g) 增加执行权限

  其他用户(o) 增加执行权限

  例2:$ chmod ug+w,o-x text

  即设定文件text的属性为:

  文件属主(u) 增加写权限

  与文件属主同组用户(g) 增加写权限

  其他用户(o) 删除执行权限

  例3:$ chmod u+s a.out

  假设执行chmod后a.out的权限为(可以用ls – l a.out命令来看):

  –rws--x--x 1 inin users 7192 Nov 4 14:22 a.out

  并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw-------”,即该文件只有其属主具有读写权限。

  当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。

  因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。

  例4:$ chmod a–x mm.txt

  $ chmod –x mm.txt

  $ chmod ugo–x mm.txt

  以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。

  (2)数字设定法:

  例1: $ chmod 644 mm.txt

  $ ls –l

  即设定文件mm.txt的属性为:

  -rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt

  文件属主(u)inin 拥有读、写权限

  与文件属主同组人用户(g) 拥有读权限

  其他人(o) 拥有读权限

  例2: $ chmod 750 wch.txt

  $ ls –l

  -rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt

  即设定wchtxt这个文件的属性为:

  文件主本人(u)inin 可读/可写/可执行权

  与文件主同组人(g) 可读/可执行权

  其他人(o) 没有任何权限


 注:正确新建ssh定时任务顺序  
     
         crontab -e (进入编辑添加) -->  crontab -l (查看ssh脚本列表) --> vi /src/*.ssh (进入编辑添加具体执行命令)-->  chmod +x /src/*.sh (赋予可执行权限) --> tail -100 /src/*.log (查看执行日至)
 
0 0