为什么我们在 Linux 中需要“at”命令?

为什么我们在 Linux 中需要“at”命令?

我正在研究at使用该命令的代码。我环顾四周,发现它是用来执行批处理作业的。它用于安排作业。它被给予作为其输入的命令和时间(相对或绝对)。

所以,我的第一个问题是:为什么at使用该命令?什么情况下需要使用at?当有一些 bash 脚本代码尝试卸载软件以及需要重新启动某些后台服务时,我遇到过这种情况。

我的第二个问题:将任何命令作为批处理作业执行与直接调用命令(或在子 shell 中)执行命令有什么区别?

答案1

Bernhard 的回答是正确的:在多用户系统中,对于提交作业的人和他的同事来说,在晚上的某些不合时宜的时间执行繁重的程序的能力特别方便。这是“玩得开心”的一部分。

我完成了大部分博士学位。以这种方式计算,将脚本与好的每当其他人让机器忙碌时,该命令就会降低我工作的优先级,同时保持其在夜间占用所有系统资源的能力。

我使用相同的命令来检查我的程序是否正在运行,并在必要时重新启动它。

另外,您应该记住很早以前就写过屏幕、tmux等等,因此这是一种拥有独立外壳的简单方法,即一旦您注销系统就不会死掉的外壳。

最后,您还应该注意到它与 cron 不同,后者也已经存在很长时间了。区别在于,at 是偶尔出现的,而 cron 则具有重复性,更适合真正需要以固定时间间隔永久执行的系统作业:事实上,为您提供自己的环境,以及您自己的环境变量设置(和选择),同时计划任务使用最小的环境变量集(只需检查小路, 举个例子)。

答案2

当我需要对数据进行一些繁重的处理时,我会使用该at命令,并且我希望在晚上不在计算机后面时执行这些处理。当然,我可以在离开后立即开始该过程,但这是我容易忘记的事情。

该命令的结果与定期执行脚本或命令没有什么不同。

答案3

当您有此类问题时,请务必查阅手册页。它们非常有启发性。

它能做什么

摘自手册页

NAME
       at, batch, atq, atrm - queue, examine or delete jobs for later execution

DESCRIPTION
       at  and  batch  read  commands  from  standard  input or a specified file
       which are to be executed at a later time, using /bin/sh.

用法

工具的使用:

Usage: at [-V] [-q x] [-f file] [-mldbv] timespec ...
       at [-V] [-q x] [-f file] [-mldbv] -t time
       at -c job ...
       atq [-V] [-q x]
       atrm [-V] job ...
       batch

at包括 4 个命令(atatqatrmbatch)。您可以使用atbatch来计划作业、atq查看计划的内容以及atrm在作业运行之前将其删除。

$ at -f <cmd> timspec

时间规范

at可以通过不同的方式指定运行作业的时间。

手册页中的摘录形式

At 允许相当复杂的时间规范,扩展了 POSIX.2 标准。它接受 HH:MM 形式的时间来在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。)您还可以指定午夜、中午或下午茶时间(下午 4 点),并且您可以在一天中的时间后缀添加 AM 或 PM 来表示早上跑步或晚上。您还可以指定作业将在哪一天运行,方法是以月份-名称日的形式给出日期(带有可选年份),或者以 MMDD[CC]YY、MM/DD/[CC]YY 的形式给出日期, DD.MM.[CC]YY 或 [CC]YY-MM-DD。日期的指定必须遵循一天中时间的指定。您还可以给出像现在这样的时间 + 计算时间单位,其中时间单位可以是分钟、小时、天或周,您可以通过在今天的时间后缀来告诉 at 今天运行作业,明天运行作业在时间后加上明天。

例子

假设你有这个 shell 脚本。

$ cat mycrontest.sh

#!/bin/bash
 echo "It is now $(date +%T) on $(date +%A)"

示例运行:

$ ./mycrontest.sh
It is now 18:37:42 on Friday

作业提交示例:

$ at -f mycrontest.sh  10pm tomorrow
job 14 at Sun Jul  8 22:00:00 2007

$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007

$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007

$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007

参考

答案4

您可以使用 at、batch 或 cron 这三个命令中的任何一个在 UNIX/Linux 中执行批处理作业。

使用特定日期和时间安排 at 作业

Syntax:

    $ at time date
For example, to schedule a job at 11 am on May 20, use the following at command.

    $ at 11 am may 20

相关内容