前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 下 At 命令

Linux 下 At 命令

作者头像
雪梦科技
发布2020-05-11 14:13:55
18.6K0
发布2020-05-11 14:13:55
举报
文章被收录于专栏:ITCoderITCoder

at是一个命令行工具,它允许你指定命令在指定的时间运行。由at创建的任务,仅仅会被执行一次。

在本文中,我们将会讲解如何使用at以及它的同类工具batch,atq,atrm去查看,删除和创建任务,以便在稍后的时间运行。

一、安装At

取决于不同的发行版,at在你的 Linux 系统中可能有,也可能没有。

如果at没有被安装,你可以很容易地使用你发行版的软件包来安装它。

1.1 在 Ubuntu 和 Debian 上安装at

代码语言:javascript
复制
sudo apt update 
sudo apt install at

1.2 在 CentOS 和 Fedora 上安装at

代码语言:javascript
复制
sudo yum install at

一旦程序被安装好,确认atd,这个守护程序正在运行,并且被设置成开机启动:

代码语言:javascript
复制
sudo systemctl enable --now atd

二、如何使用at命令

at的简单语法如下:

代码语言:javascript
复制
at [OPTION...] runtime

这个at命令将日期和时间(runtime)作为参数,用来决定你的任务什么时候执行,并且命令将会从标准输入上执行。

让我们创建一个任务,在上午9:00执行:

代码语言:javascript
复制
at 09:00

一旦你输入Enter,你将会被展示at命令的提示界面,通常以at>开头。你也会看到一个警告,告诉你你将要运行命令的 shell 环境:

代码语言:javascript
复制
warning: commands will be executed using /bin/sh
at>

输入一个或者更多你想要执行的命令:

代码语言:javascript
复制
tar -xf /home/linuxize/file.tar.gz

当你完成输入命令的时候,按Ctrl-D退出提示界面,并且保存任务:

代码语言:javascript
复制
at> <EOT>
job 4 at Tue May  5 09:00:00 2020

这个命令将会显示任务序号,和执行的时间和日期。

除了在at提示界面输入命令之外,还有一些方法可以传递你需要运行的命令。一种方法就是使用echo,然后使用管道传递给at

代码语言:javascript
复制
echo "command_to_be_run" | at 09:00

另外一种选项就是使用这里的文档

代码语言:javascript
复制
at 09:00 <<END
command_to_be_run
END

想要从文件中读取命令,而不是标准输入中读取,运行命令加上-f,再加上文件路径。例如,想要创建一个任务,运行脚本: /home/linuxize/script.sh:

代码语言:javascript
复制
at 09:00 -f /home/linuxize/script.sh

默认情况下,这个命令会产生输出,一旦任务完成,at将会发送一封包括输出的邮件给用户。运行at加上-M选项将会阻止邮件通知。

代码语言:javascript
复制
at 09:00 -M

使用-m选项时,即使没有输出,也会发送一封邮件。

代码语言:javascript
复制
at 09:00 -m

三、batch命令

batch或者它的关联at -b预定任务并且在系统负载允许的情况下,批量执行任务。默认情况下,当系统平均负载在1.5以下的时候,任务将会被执行。在运行atd守护进程的时候,负载值可以被指定。如果系统负载平均值高于指定的值,任务将会在队列中等待。

想要使用batch创建一个任务,传递你想要执行的命令:

代码语言:javascript
复制
echo "command_to_be_run" | batch

四、指定执行时间

at工具接受一个宽泛的指定。你可以指定时间,日期,和当前时间的增量。

  • Time - 指定一个时间HH:MM或者HHMM形式。想要使用12小时格式,使用am或者pm在时间后面。你可以使用字符串"now”,“midnight”,“noon” 或者 “teatime”(16:00)。如果传递了指定时间,那么任务将会在下一天执行。
  • Date - 这个命令允许你指定任务在指定日期执行。 这个日期可以使用月份,加上天数,也可以选择加上年份。你可以使用字符串,例如today,tomorrow,或者 weekday. 这个日期可以是以下格式: MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY 或者 [CC]YY-MM-DD 格式。
  • Increment - at也支持增量,格式是now + count time-unit格式,这里count必须是数字,并且time-unit可以是这些字符串:minutes, hours, days, 或者 weeks。

Time, date 和 increment 可以合并使用,下面是一些例子:

  • 计划任务在即将到来的星期日,当前时间之后的十分钟执行:
代码语言:javascript
复制
at sunday +10 minutes
  • 计划任务在两天后的1pm执行:
代码语言:javascript
复制
at 1pm + 2 days
  • 计划任务在 12:30 Oct 21 2020 运行:
代码语言:javascript
复制
at 12:30 102120
  • 计划任务在从现在开始的一个小时后运行:
代码语言:javascript
复制
at now +1 hours

你可以使用-t选项,以这个格式[[CC]YY]MMDDhhmm[.ss]指定一个时间和日期。

下面是一个例子:

代码语言:javascript
复制
at -t 202005111321.32

五、指定队列

默认情况下,由at创建的任务被计划在命名为a的队列,并且由batch创建的任务被计划在b队列。

队列命名从az,和 从AZ。对于使用更小字母的队列,它们有更小的 niceness 值,这意味着它们拥有比那些更大字母更高的优先级。

你可以使用-q选项,指定一个队列。例如,想要设置一个任务到L队列,你将要运行:

代码语言:javascript
复制
at monday +2 hours -q L

六、 列出将要执行的任务

想要列出用户将要执行的任务,运行atq或者at -l命令:

代码语言:javascript
复制
atq

输出将会列出所有的任务,一行一个。每一行包括任务号码,日期,时间,队列字母,和用户名。

代码语言:javascript
复制
9	  Tue May  5 12:22:00 2020 a linuxize
12	Wed Oct 21 12:30:00 2020 a linuxize
15	Tue May  5 09:00:00 2020 a linuxize
6	  Tue May  5 09:00:00 2020 a linuxize
13	Mon May  4 23:08:00 2020 a linuxize
11	Wed Jul  1 10:00:00 2020 a linuxize
4	  Tue May  5 09:00:00 2020 a linuxize

使用管理员账户运行atq的时候,它将会列出所有用户将要执行的任务。

七、移除将要执行的任务

想要移除将要执行的任务,运行atrm或者at -r命令加上任务号。例如,想要移除任务,序号为9,你将运行:

代码语言:javascript
复制
atrm 9

八、限制用户

/etc/at.deny/etc/at.allow文件允许你控制哪些用户有权使用at或者batch命令来创建任务。这个文件包含了一列用户名,一个用户一行。

默认情况下,仅仅/etc/at.deny文件存在,并且是空的,这意味着所有用户可以使用at命令。如果你想禁止某一个用户的权限,将他的用户名添加到这个文件中。

如果/etc/at.allow文件存在,仅仅只有在该文件中列出的用户才能使用at命令。

如果这两个文件都不存在,那么仅仅只有有管理权限的用户可以使用at命令。

九、总结

at工具从标准输入读取命令,并且在后面的时间执行。不像crontab,由at创建的任务仅仅只被执行一次。

想要了解更多关于at命令的信息,在你的终端输入man at


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020年05月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、安装At
    • 1.1 在 Ubuntu 和 Debian 上安装at
      • 1.2 在 CentOS 和 Fedora 上安装at
      • 二、如何使用at命令
      • 三、batch命令
      • 四、指定执行时间
      • 五、指定队列
      • 七、移除将要执行的任务
      • 八、限制用户
      • 九、总结
      相关产品与服务
      批量计算
      批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档