Linux 定时任务 | at 命令详解

在计算机的使用过程中,经常会有一些计划中的任务需要在将来的某个时间执行,Linux 中提供了一些方法来设定定时任务

  • at;
  • crontab;
  • systemd.timer。

这篇文章我们先来介绍 at 的使用方法。

at 简介

命令 at 从文件或标准输入中读取命令并在将来的一个时间执行,只执行一次。at 的正常执行需要有守护进程 atd

at 命令格式:at [参数] [时间]

at 命令参数

  • -m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
  • -I atq的别名
  • -d atrm的别名
  • -v 显示任务将被执行的时间
  • -c 打印任务的内容到标准输出
  • -V 显示版本信息
  • -q<列队> 使用指定的列队
  • -f<文件> 从指定文件读入任务而不是从标准输入读入
  • -t<时间参数> 以时间参数的形式提交要运行的任务
at 安装

#安装at
[root@peipei3514 ~]# yum install -y at

#启动守护进程
[root@peipei3514 ~]# systemctl start atd

#查看是否开机启动
[root@peipei3514 ~]# systemctl list-unit-files|grep atd

#设置开机启动
[root@peipei3514 ~]# systemctl enable atd
at 使用

如果不使用管道|或指定选项 -f 的话,at 的执行将会是交互式的,需要在 at 的提示符下输入命令:

#创建定时任务
[root@peipei3514 /]# at now +2 minutes	#执行at并指定执行时刻为现在时间的后两分钟
at> echo hello world > /tmp/file 		#手动输入命令并回车
at> <EOT>								#ctrl+d 结束输入
job 3 at Wed May  2 18:20:00 2018		#显示任务号及执行时间

选项 -l 或命令 atq 查询任务:

[root@peipei3514 /]# atq
3       Wed May  2 18:20:00 2018 a root

到达时间后任务被执行,生成一个新文件file并保存echo的输出内容:

[root@peipei3514 /]# ll tmp/
总用量 4
-rw-r--r--. 1 root root 12 5月   2 18:20 file
drwx------. 3 root root 17 5月   2 16:56 systemd-private-9b1eddd804d24223a769ba0be3fc7736-chronyd.service-hAmDBg
drwx------. 2 root root  6 5月   2 16:56 tmp.6EvK3t6xmq
drwx------. 2 root root  6 4月  23 18:41 tmp.HEQ599GHwD
drwx------. 2 root root  6 5月   2 12:44 tmp.VqttdTFfak
drwx------. 2 root root  6 4月  23 18:41 tmp.WDevelDATu
[root@peipei3514 /]# cat /tmp/file
hello world

选项 -d 或命令 atrm 表示删除任务:

[root@peipei3514 /]# at -d 3 #删除3号任务(上例)
[root@peipei3514 /]# atq
[root@peipei3514 /]# 

可以使用管道 | 或选项 -f 让 at 从标准输入或文件中获得任务:

[root@peipei3514 /]# cat test.txt 
echo hello world > /root/temp/file
[root@peipei3514 /]# at -f test.txt 5pm +2 days
job 12 at Wed May  4 18:20:00 2018
[root@peipei3514 /]# cat test.txt|at 16:20 12/23/18
job 13 at Fri Dec 23 16:20:00 2018
at 时间格式

at 指定时间的方法很丰富,可以是:

  1. hh:mm 小时:分钟(当天,如果时间已过,则在第二天执行);
  2. midnight(深夜),noon(中午),teatime(下午茶时间,下午4点),today,tomorrow等;
  3. 12小时计时制,时间后加am(上午)或pm(下午);
  4. 指定具体执行日期:mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年);
  5. 相对计时法:now + n units,now是现在时刻,n为数字,units是单位(minutes、hours、days、weeks)。

如明天下午2点20分执行创建一个目录:

[root@peipei3514 /]# at 02:20pm tomorrow
at> mkdir /root/temp/X
at> <EOT>
job 4 at Wed May  2 18:25:00 2018
at 控制文件

atd 通过两个文件 /etc/at.allow/etc/at.deny 来决定系统中哪些用户可以使用 at 设置定时任务,它首先检查 /etc/at.allow,如果文件存在,则只有文件中列出的用户(每行一个用户名),才能使用 at;如果不存在,则检查文件 /etc/at.deny,不在此文件中的所有用户都可以使用 at。如果 /etc/at.deny 是空文件,则表示系统中所有用户都可以使用 at;如果 /etc/at.deny 文件也不存在,则只有超级用户(root)才能使用at。

at 例子

实例1:三天后的下午 5 点钟执行 /bin/ls

命令:

at 5pm+3 days

输出:

[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00
[root@localhost ~]#
实例2:明天17点钟,输出时间到指定文件内

命令:

at 17:20 tomorrow

输出:

[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log         
at> <EOT>
job 8 at 2013-01-06 17:20
[root@localhost ~]#
实例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务

命令:

atq

输出:

[root@localhost ~]# atq
8       2013-01-06 17:20 a root
7       2013-01-08 17:00 a root
[root@localhost ~]#
实例4:删除已经设置的任务

命令:

atrm 7

输出:

[root@localhost ~]# atq
8       2013-01-06 17:20 a root
7       2013-01-08 17:00 a root
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
8       2013-01-06 17:20 a root
[root@localhost ~]#
实例5:显示已经设置的任务内容

命令:

at -c 8

输出:

[root@localhost ~]# at -c 8
#!/bin/sh
# atrun uid=0 gid=0
# mail     root 0
umask 22此处省略n个字符
date >/root/2013.log
[root@localhost ~]#
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值