如果您想安排一个只发生一次的Linux作业,cron就太过了。at系列的命令是你所需要的!如果只想在系统有空闲资源时运行进程,可以使用批处理。
cron守护进程维护它在特定时间运行的作业列表。这些任务和程序按预定时间在后台运行。这为您安排需要重复的任务提供了极大的灵活性。无论您需要每小时运行一次任务、每天在特定时间运行一次任务,还是每月或每年运行一次任务,都可以在cron中进行设置。
但是,如果您想将一个任务安排为只运行一次,那么这并没有帮助。当然,您可以在cron中设置它,但是您必须记住在任务执行后返回并删除crontab条目,这很不方便。
对于Linux,如果你正在为一个问题而挣扎,这几乎可以保证其他人也在为这个问题而挣扎。幸运的是,因为类Unix的操作系统已经存在了很长时间,所以很有可能有人已经为您的问题创建了一个解决方案。
对于上面概述的问题,他们有,这是在。
相关:如何在Linux上调度任务:Crontab文件简介
我们必须在ubuntu18.04和manjaro18.1.0上安装at(它已经安装在fedora31上了)。
要在Ubuntu上安装at,请使用以下命令:
sudo apt-get install at安装完成后,可以使用以下命令启动at守护程序:
sudo systemctl enable --now atd.service在Manjaro上,使用以下命令安装:
sudo pacman -Sy at安装完成后,键入以下命令启动at守护程序:
sudo systemctl enable --now atd.service在任何发行版上,都可以键入以下命令以确保atd守护程序正在运行:
ps -e | grep atd要使用at,必须为其指定运行的日期和时间。编写这些代码的方式有很大的灵活性,我们将在本文后面介绍。
但是,即使我们将以交互方式使用at,您也必须预先提供日期和时间。如果在命令行中没有包含任何内容,或者键入的内容不是日期和时间,at将以“乱码时间”响应,如下所示:
at at banana日期和时间可以是明确的,也可以是相对的。例如,假设您希望在一分钟后执行一个命令。at知道“now”是什么意思,所以您可以使用now并在其中添加一分钟,如下所示:
at now + 1 minuteat打印出消息和at提示符,并等待您键入要调度的命令。不过,首先要考虑以下信息:
它告诉您至少启动一个sh shell实例,并在其中运行命令。您的命令不会在bashshell中执行,bashshell与shshell兼容,但具有更丰富的特性集。
如果您的命令或脚本尝试使用Bash提供的函数或工具,但sh没有,它们将失败。
很容易测试您的命令或脚本是否将在sh中运行。使用sh命令启动sh shell:
sh命令提示符变为美元符号($),现在可以运行命令并验证它们是否正确运行。
要返回Bash shell,请键入exit命令:
exit您将看不到来自命令的任何标准输出或错误消息。这是因为sh shell作为后台任务启动,运行时没有任何屏幕界面。
命令输出的好坏都会通过电子邮件发送给您。它通过内部邮件系统发送给运行at命令的人。这意味着您必须设置和配置内部电子邮件系统。
许多(大多数)Linux系统没有内部电子邮件系统,因为很少需要。那些通常使用sendmail或postfix这样的系统。如果您的系统没有内部电子邮件系统,您可以让脚本写入文件或将输出重定向到文件以添加日志记录。
如果命令没有生成任何标准输出或错误消息,那么无论如何,您将不会收到电子邮件。许多Linux命令都是通过沉默来表示成功的,所以在大多数情况下,您不会收到电子邮件。
相关:Linux上的stdin、stdout和stderr是什么?
现在,是时候在中键入命令了。对于本例,我们将使用一个名为扫描.sh删除*.bak、*.tmp和*.o文件。键入命令的路径,如下所示,然后按Enter键。
另一个命令提示符出现,您可以添加任意数量的命令。通常,将命令放在一个脚本中并从中调用该脚本会更方便。
按Ctrl+D告诉at您已完成添加命令。at显示<;EOT>;,表示传输结束。系统会告诉您作业编号以及作业计划运行的时间,如下所示:
作业执行后,键入以下内容以检查内部邮件:
mail如果没有邮件,你必须假设成功。当然,在本例中,您可以检查并查看*.bak、*.tmp和*.o文件是否已被删除,以确认命令是否有效。
键入以下内容以再次运行整个过程:
at now + 1 minute一分钟后,键入以下内容以重新检查邮件:
mail嘿,我们收到邮件了!要阅读第一条信息,请按1,然后按Enter。
我们收到了来自的电子邮件,因为脚本中的命令生成了错误消息。在本例中,没有要删除的文件,因为我们以前运行脚本时,它删除了这些文件。
按D+Enter键删除电子邮件,按Q+Enter键退出邮件程序。
在使用时间格式时,您有很大的灵活性。以下是几个例子:
您可以键入atq命令来查看计划作业的队列,如下所示。
对于队列中的每个命令,atq显示以下信息:
您不必以交互方式使用at;也可以在命令上使用它。这使得在脚本中使用更容易。
您可以将命令导入at,如下所示:
echo "sh ~/sweep.sh" | at 08:45 AM作业由at接受并安排,作业编号和执行日期与以前一样报告。
相关:如何在Linux上使用管道
您还可以在文件中存储一系列命令,然后将其传递给at。它可以是命令的纯文本文件,而不必是可执行脚本。
可以按以下方式使用-f(文件)选项将文件名传递给:
at now + 5 minutes -f clean.txt如果将文件重定向到以下位置,则可以获得相同的结果:
at now + 5 minutes < clean.txt要从队列中删除计划作业,可以使用atrm命令。如果要首先查看队列以查找要删除的作业的编号,可以使用atq。然后,将该作业编号与atrm一起使用,如下所示:
atq atrm 11 atq如前所述,您可以将作业安排到遥远的将来。有时候,你可能会忘记一份工作要做什么。atq命令显示队列中的作业,但不显示它们将要执行的操作。如果要查看作业的详细视图,可以使用-c(cat)选项。
首先,我们将使用atq查找工号:
atq现在,我们将作业编号13与-c选项一起使用:
at -c 13以下是我们得到的关于这份工作的详细信息:
批处理命令的操作与at命令类似,但有三个显著区别:
使用批处理命令时,按名称调用它,不带命令行参数,如下所示:
batch接下来,像使用at命令一样添加任务。
这个允许以及拒绝文件控制谁可以使用at系列命令。它们位于/etc目录中。默认情况下,只有拒绝文件存在,它是在安装时创建的。
以下是它们的工作原理:
默认情况下,任何人都可以使用。如果要限制谁可以使用它,请使用允许列出那些可以的人。这比将不能使用at的所有人添加到拒绝文件。
这是你的想法拒绝文件看起来像:
sudo less /etc/at.deny该文件列出了操作系统中不能在上使用的组件。由于安全原因,这些文件中的许多都被阻止这样做,因此您不想从文件中删除任何文件。
现在,我们将编辑允许文件。我们要加上戴夫和玛丽,但不允许其他人使用。
首先,我们键入以下内容:
sudo gedit /etc/at.allow在编辑器中,我们添加两个名称,如下所示,然后保存文件。
如果有人试图使用at,他会被告知没有权限。例如,假设一个名为eric的用户键入以下内容:
at他将被拒绝,如下所示。
再说一遍,埃里克不在办公室拒绝文件。一旦你把任何人放进允许任何其他人都被拒绝使用。
如您所见,at和batch都非常适合只需运行一次的任务。再次快速回顾:
...lenium WebDriver。在本文中,我们将简要介绍Selenium,并提供如何在系统上安装Selenium WebDriver的详细指南。 ...
... 本课程将带您了解Linux的“如何”和“为什么”,并展示各种Linux命令的工作方式、它们的真实结构以及记住这些命令的正确方法。 ...
...符不仅要有一个命令词典,还要了解每个参数的含义以及如何将不同的参数组合起来以达到预期的效果。 ...
...,那么很简单:创建您一直键入的内容的片段,然后选择如何触发它们。它可以是热键或缩写。例如,输入“adr”可以扩展到输入您的家庭地址。 ...
... 在本文中,您将学习如何编写一个简单的批处理文件。您将学习批处理文件的基本功能以及如何自己编写它们。我还将为您提供学习编写批处理(BAT)文件的更多资源。 ...
...好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。 进程状态如何在linux上工作 当然,Linux必须跟踪计算机上运行的所有应用程序和守护进程。其中一种方法是维护进程表。这是内...
需要识别Linux计算机中的图形处理单元(GPU)吗?下面是如何从命令行和GNOME中识别图形卡。 第一步 你可能去过那里。你被征召来为一个非技术性的亲戚或同事提供支持,有些事情告诉你这不是无痛的。不过,你还是加入了!...
Linux系统中的文件和目录都属于某个人。您可以使用chown命令更改它们的所有权。我们教你怎么做。 每个文件都属于一个用户和一个组 Linux是一个多用户系统。操作系统允许定义多个用户帐户,并允许任何有效用户登录到计算...
...您选择的编辑器而不是相反的方式吗?本教程将向您展示如何。这些指令适用于Linux、macOS和其他类似Unix的操作系统。 文本编辑的敏感话题 文本编辑器执行一项非常平凡的任务。然而,人们对编辑个人喜好的深切感受导致了自...
...驱动的问答网站分组。 问题 超级用户阅读器MiHa想知道如何在任务计划程序中创建任务,以实现笔记本电脑上电池电量变化: I need to create a task in Task Scheduler based on battery level changes. For example, say my laptop’s battery drops from 67 perce...