我正在研究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 个命令(at
、atq
、atrm
和batch
)。您可以使用at
和batch
来计划作业、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