Unix crontab at 定时任务命令

来源:互联网 发布:directx编程入门 编辑:程序博客网 时间:2024/05/22 13:56

Unix系统提供了cron和at命令,使系统和用户可以定时运行一定的程序,而不需手工启动。

普通用户也可以使用crontab命令来创建和维护自己的crontab文件。由于是用户不能更改执行程序的标识的,因此用户的crontab就不需第六列──执行程序的用户身份,而只要直接跟随要执行的命令。使用 “crontab -e” 命令,使用编辑器按照相应的格式编辑自己的crontab文件,或者使用 “crontab -l ” 列出现有crontab文件的内容,当然只有root用户才能查看其他用户的crontab文件:

一般是执行crontab -e <username>,然后在里面填内容,可以man crontab获得帮助
根用户的 crontab 文件放在 /var/spool/crontab/root 中,其格式如下:

  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序

-----------------------------------------------------------------------------------  
定时执行crontab使用方法详解    
  使用方式:    
  crontab   [   -u   user   ]   filecrontab   [   -u   user   ]   {   -l   |   -r   |   -e   }    
  说明:    
  crontab   是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u   user   是指设定指定   user   的时程表,这个前提是你必须要有其权限(比如说是   root)才能够指定他人的时程表。如果不使用   -u   user   的话,就是表示设定自己的时程表。    
  参数:
  -e:执行文字编辑器来设定时程表,内定的文字编辑器是   VI,如果你想用别的文字编辑器,则请先设定   VISUAL   环境变数来指定使用那个文字编辑器(比如说   setenv   VISUAL   joe)    
  -r:删除目前的时程表    
  -l:列出目前的时程表    
   
  时程表的格式如下:    
  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   的方式来设定时程表。    
  例子:    
  每月每天每小时的第   0   分钟执行一次   /bin/ls:    
  0   7   *   *   *   /bin/ls    
   
  在   12   月内,   每天的早上   6   点到   12   点中,每隔   20   分钟执行一次   /usr/bin/backup:    
  0   6-12/3   *   12   *   /usr/bin/backup    
   
  周一到周五每天下午   5:00   寄一封信给   alex@domain.name:    
  0   17   *   *   1-5   mail   -s   \"hi\"   alex@domain.name   <   /tmp/maildata    
   
  每月每天的午夜   0   点   20   分,   2   点   20   分,   4   点   20   分....执行   echo   \"haha\"    
  20   0-23/2   *   *   *   echo   \"haha\"    
   
  注意:    
  当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上   >   /dev/null   2>&1   即可。


   所有用户的crontab设置文件都放在/var/cron/tabs目录下,文件名与每个用户的用户名相同。cron中的命令执行结果将被系统使用mail寄给每个用户。在/var/cron目录下还有crontab执行的记录文件,系统管理员可以按照这个文件来检查系统安全性,检查是否有影响系统安全的程序被执行。

  /usr/lib/cron/cron.allow表示谁能使用crontab命令。如果它是一个空文件表明没有一个用户能安排作业。如果这个文件不存在,而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时cron.allow优先,如果都不存在,只有超级用户可以安排作业。 

  
与cron不同,at命令用于在一定的时间后或在一定的时刻执行设置好的命令。at命令使用一个时间参数表示何时执行命令,然后就从标准输入中读入要执行的命令,此时就如同在shell下操作一样输入要执行的命令,最后使用^D 退出输入命令的模式。用户不必担心真正执行命令时是否能够找到正确的程序,at会将当前shell的设置,包括环境变量,保留起来,以便在执行命令时创造一个与启动at时完全相同的执行环境。

$ at 1:00am +2days
wget ftp://ftp.cdrom.com/pub/FreeBSD/packages/All/netscape.tgz
^D
 
上面命令将在两天后的凌晨1:00时启动进程下载文件,当然at命令并不是十分精确,其执行时间只是表示大概时间,可能与标准时间存在一两分钟的差异。at也支持各种复杂的时间表示方法,可以使用hhmm,hh:mm,或者加上am或pm结尾的12小时制方式。还可以使用年月日,规定程序运行的日期:

$ at 1:00am Mar 5
echo Hello | mail root
^D
Job 5 will be executed using /bin/sh
$ atq
Date                    Owner   Queue   Job#
01时00分00秒 00/03/05   root    c       5
$ atrm 5
 
用户的at程序执行结果也被系统邮寄给该用户,用户可以使用mail来查看程序的输出结果或执行错误。当用户启动at命令之后,可以使用atq命令来查看自己还没有执行的at命令,如果atq是由root执行,则将列出系统中所有没有执行的at命令。然后可以使用atrm命令根据atq输出Job号来删除at作业。

系统使用/var/at/at.allow和/var/at/at.deny文件来配置可以使用at命令的用户,和不可以使用at命令的用户。其中at.allow的优先权更高,如果存在at.allow,就只允许这个文件中列出的用户使用at,而不考虑任何不在这个文件中列出的用户。因此可以使用一个空at.allow文件禁止所有用户使用at。当不存在at.allow文件的时候,那么凡不在at.deny文件中列出的用户都可以使用

 

原创粉丝点击