运维日记019 -- Linux下使用at执行定时任务

运维日记019 – Linux下使用at执行定时任务

在Linux中cron机制适宜于处理周期性执行的规律工作,但如果仅仅想把任务安排在某个预定时间执行一次,则应该用at。at既可以接收来自stdin的命令,也接收预先写在文件中的命令。

at的安装

RHEL6最小化安装后是没有at的,可以用如下方式查询at所在的软件包并安装之:

# yum provides at
... ...
at-3.1.10-43.el6_2.1.x86_64 : Job spooling tools
... ...

# yum install at

查看一下atd服务是否开启,并将其设置为开机启用:

# service atd status
atd is stopped

# service atd start
Starting atd:                                              [  OK  ]

# chkconfig --list atd
atd             0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭

at的语法

  • at [-f] time
  • at [options]

at命令的第一种形式会从stdin或者file文件读取命令,将命令排入队列,使其于指定时间(time)执行;第二种形式可以列出或者删除队列中的任务。

常用选项:

  • -d job1 [,jib2, …]
    删除队列中的特定任务

  • -l
    列出已排在队列中的任务

设置成功的at计划任务会在/var/spool/at下生产一个可执行脚本,例如:

# at -f my_program 12:00

# ll /var/spool/at
总用量 8
-rwx------. 1 root   root   2638 11月  1 11:06 a000070177ddfb
drwx------. 2 daemon daemon 4096 11月  1 11:05 spool

文件a000070177ddfb就是这个计划任务的可执行脚本,当任务执行完成后,该脚本文件又会被删除。

范例

  • 在今天10:58执行一次date命令
$ at 10:58
at> date > /tmp/at.txt
at> <EOT>
job 1 at Tue Nov  1 10:58:00 2016

$ cat /tmp/at.txt
20161101日 星期二 10:58:00 CST
  • 三分钟后对磁盘sdb1执行一次检查:
# at now+3 minutes
at> fsck /dev/sdb1
at> <EOT>
  • 2016年11月1日上午8点执行一次my_comm_list文件中所列的命令:
# at -f my_comm_list 8:00 am 11012016
  • 查看队列中的未完成任务,然后删除5号任务:
# at -l
6       2016-10-31 12:29 a root
5       2016-11-01 08:00 a root

# at -d 5

at的访问控制

和cron类似,at也提供了访问控制措施,以决定哪些用户可以使用调度服务。

  • /etc/at.deny
  • /etc/at.allow

如果两个文件都不存在,则只有root管理员可以使用at;如果只有at.deny文件,而at.allow文件不存在,则除了黑名单之外的所有用户都可以使用at;如果at.allow文件存在,则只有白名单用户才可以使用at。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值