at命令

本文详细介绍了Linux系统下用于处理仅运行一次就结束排程的at命令及其服务atd,以及循环执行任务的crontab命令及其服务crond。文章深入探讨了at和crontab的使用方法、配置细节、执行流程和注意事项,包括如何通过at和crontab实现精确的时间调度、工作执行和任务管理,以及如何在系统启动时自动启动atd和crond服务。
  • at :at 是个可以处理仅运行一次就结束排程的命令,不过要运行 at 时, 必须要有 atd 这个服务 (第十八章) 的支持才行。在某些新版的 distributions 中,atd 可能默认并没有启动,那么 at 这个命令就会失效呢!
  • crontab :crontab 这个命令所配置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用命令运行外,亦可编辑 /etc/crontab 来支持。 至於让 crontab 可以生效的服务则是 crond 这个服务喔!

    [root@www ~]# /etc/init.d/atd restart
    正在停止 atd:                          [  确定  ]
    正在启动 atd:                          [  确定  ]
    
    # 再配置一下启动时就启动这个服务,免得每次重新启动都得再来一次!
    [root@www ~]# chkconfig atd on
    

  • 我们使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了
  • at 的工作情况其实是这样的:
    1. 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

    2. 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;

    3. 如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
    [root@www ~]# at [-mldv] TIME
    [root@www ~]# at -c 工作号码
    选项与参数:
    -m  :当 at 的工作完成后,即使没有输出信息,亦以 email 通知使用者该工作已完成。
    -l  :at -l 相当於 atq,列出目前系统上面的所有该使用者的 at 排程;
    -d  :at -d 相当於 atrm ,可以取消一个在 at 排程中的工作;
    -v  :可以使用较明显的时间格式列出 at 排程中的工作列表;
    -c  :可以列出后面接的该项工作的实际命令内容。
    
    TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
      HH:MM				ex> 04:00
    	在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
      HH:MM YYYY-MM-DD		ex> 04:00 2009-03-17
    	强制规定在某年某月的某一天的特殊时刻进行该工作!
      HH:MM[am|pm] [Month] [Date]	ex> 04pm March 17
    	也是一样,强制在某年某月某日的某时刻进行!
      HH:MM[am|pm] + number [minutes|hours|days|weeks]
    	ex> now + 5 minutes	ex> 04pm + 3 days
    
  •  
  •  
  •  
  •  
  • 	就是说,在某个时间点『再加几个时间后』才进行。
    
    范例一:再过五分钟后,将 /root/.bashrc 寄给 root 自己
    [root@www ~]# at now + 5 minutes  <==记得单位要加 s 喔!
    at> /bin/mail root -s "testing at job" < /root/.bashrc
    at> <EOT>   <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束!
    job 4 at 2009-03-14 15:38
    # 上面这行资讯在说明,第 4 个 at 工作将在 2009/03/14 的 15:38 进行!
    # 而运行 at 会进入所谓的 at shell 环境,让你下达多重命令等待运行!
    
    范例二:将上述的第 4 项工作内容列出来查阅
    [root@www ~]# at -c 4
    #!/bin/sh               <==就是透过 bash shell 的啦!
    # atrun uid=0 gid=0
    # mail     root 0
    umask 22
    ....(中间省略许多的环境变量项目)....
    cd /root || {           <==可以看出,会到下达 at 时的工作目录去运行命令
             echo 'Execution directory inaccessible' >&2
             exit 1
    }
    
    /bin/mail root -s "testing at job" < /root/.bashrc
    # 你可以看到命令运行的目录 (/root),还有多个环境变量与实际的命令内容啦!
    
    范例三:由於机房预计於 2009/03/18 停电,我想要在 2009/03/17 23:00 关机?
    [root@www ~]# at 23:00 2009-03-17
    at> /bin/sync
    at> /bin/sync
    at> /sbin/shutdown -h now
    at> <EOT>
    job 5 at 2009-03-17 23:00
    # 您瞧瞧! at 还可以在一个工作内输入多个命令呢!不错吧!
    

     

    atq用来查询已经安排的at明明
  • atrm 5  用来删除atq查询出来的第5个任务
  • 他会在 CPU 工作负载小於 0.8 的时候,才进行你所下达的工作任务啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值