二维码

使用UNIX at工具调度一次命令

1523 人阅读 | 时间:2020年01月03日 13:57

克朗一切都很好,但不要忘记它的表弟at

当我第一次开始使用Linux时,就像被扔到UNIX池的深层。预计您将大量使用命令行以及分发版附带的所有标准实用程序和服务。从那时起,如今情况发生了很大变化,如今,您可以使用标准的Linux桌面,而无需打开终端或使用旧的UNIX服务。如今,即使作为系统管理员,您也往往在其中一些核心服务之上有几层抽象。

我说所有这些都是为了指出,对于我们的老手来说,很容易想当然地认为我们周围的每个人天生就知道我们使用的所有命令行工具。但是,即使我已经使用Linux 20年了,我仍然一直在学习新的(对我而言)命令行工具。在这个“返璞归真”文章系列中,我计划介绍一些Linux新手可能从未使用过的命令行工具。对于那些比较高级的人,我将分发本系列文章,因此您可以期望以后的文章更具技术性。在本文中,我描述了如何使用该at实用工具来安排作业在以后运行。

at 与Cron

at是那些讨论不多的命令之一。当人们谈论调度命令时,通常cron获得最大的覆盖范围。Cron允许您安排要定期运行的命令。使用cron,您可以每分钟,每天,每周,每月甚至每年一次频繁地运行命令。您还可以定义更复杂的规则,因此命令例如每五分钟,每工作日,每隔一小时和许多其他组合运行。系统管理员有时会使用cron来计划本地脚本,以每分钟收集一次指标或计划备份。

另一方面,尽管该at命令还允许您计划命令,但它的用途与cron完全不同。使用cron可以安排命令定期运行,而at可以安排在将来的特定时间仅运行一次的命令。这意味着at可以满足cron的不同需求,并且通常更为直接。

使用 at

at有时 ,该命令是大多数Linux发行版中的标准命令,但是如今,即使在服务器上,您也可能发现自己必须at明确安装该软件包。安装后,最简单的使用方法at是在命令行中键入它,然后是您希望命令运行的时间:

$ at 18:00

at命令还可以接受许多不同的时间格式。例如,它可以理解AM和PM以及诸如“明天”之类的单词,因此您可以将上面的命令替换为相同的命令:

$ at 6pm

而且,如果您想在明天那个时候运行相同的命令,请执行以下操作:

$ at 6pm tomorrow

按下Enter键后,您将进入一个交互式外壳:

$ at 6pm tomorrowwarning: commands will be executed using /bin/shat>

在交互式外壳程序中,您可以输入当时要运行的命令。如果要运行多个命令,请在每个命令后按Enter,然后在新at>提示符下键入命令输入命令完成后,在空白at>提示下按Ctrl-D 退出交互式外壳。

例如,假设我注意到一台特定的服务器在过去两天的凌晨5:10大约五分钟内出现问题,到目前为止,我在日志中什么都没有看到。虽然我能醒得早,并登录到服务器,而不是我可以写一个简短的脚本,从收集的数据psnetstattcpdump等命令行工具了几分钟,所以当我醒来时,我可以走了过来数据它收集了。由于这是一次性的,所以我不想使用cron来安排某些事情,并且冒险将其遗忘并每天运行,所以我将用以下方法进行设置 at

$ at 5:09am tomorrowwarning: commands will be executed using /bin/shat>at> /usr/local/bin/my_monitoring_script

然后按Ctrl-D,外壳将退出并显示以下输出:

at> <EOT>job 1 at Wed Sep 26 05:09:00 2018

管理at工作

计划好at作业后,能够拉出at队列中所有作业的列表非常有用,这样您就可以知道正在运行的内容和时间。atq 命令列出当前at队列:

$ atq1   Wed Sep 26 05:09:00 2018 a kyle

第一列列出了at分配给每个作业的编号,然后列出了作业将运行的时间以及用户的运行时间。假设在上面的示例中,我意识到我犯了一个错误,因为我的脚本无法以普通用户身份运行。在这种情况下,我想使用 atrm命令删除作业编号1:

$ atrm 1

如果我要atq再次运行,我会发现该作业不再存在。然后,我可以sudo启动并使用at命令重新安排作业。

at 一线

尽管at支持交互模式,但是您也可以将命令通过管道传递给所有命令。因此,例如,我可以使用以下命令安排上述工作:

$ echo /usr/local/bin/my_monitoring_script | at 5:09am tomorrow

结论

如果您不知道这种情况的at存在,您可能会发现自己想出了各种复杂而费解的方法来安排一次性工作。更糟的是,您可能需要设置一个闹钟,以便可以更早地唤醒并登录到问题服务器。当然,如果您没有闹钟,可以使用at

$ echo "aplay /home/kyle/alarm.wav" | at 7am tomorrow


取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
关闭广告
关闭广告
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×