如何在linux上使用at和batch来调度命令

如果您想安排一个只发生一次的Linux作业,cron就太过了。at系列的命令是你所需要的!如果只想在系统有空闲资源时运行进程,可以使用批处理。...

如果您想安排一个只发生一次的Linux作业,cron就太过了。at系列的命令是你所需要的!如果只想在系统有空闲资源时运行进程,可以使用批处理。

如何安排linux作业

cron守护进程维护它在特定时间运行的作业列表。这些任务和程序按预定时间在后台运行。这为您安排需要重复的任务提供了极大的灵活性。无论您需要每小时运行一次任务、每天在特定时间运行一次任务,还是每月或每年运行一次任务,都可以在cron中进行设置。

但是,如果您想将一个任务安排为只运行一次,那么这并没有帮助。当然,您可以在cron中设置它,但是您必须记住在任务执行后返回并删除crontab条目,这很不方便。

对于Linux,如果你正在为一个问题而挣扎,这几乎可以保证其他人也在为这个问题而挣扎。幸运的是,因为类Unix的操作系统已经存在了很长时间,所以很有可能有人已经为您的问题创建了一个解决方案。

对于上面概述的问题,他们有,这是在。

相关:如何在Linux上调度任务:Crontab文件简介

安装at命令

我们必须在ubuntu18.04和manjaro18.1.0上安装at(它已经安装在fedora31上了)。

要在Ubuntu上安装at,请使用以下命令:

sudo apt-get install at

如何在linux上使用at和batch来调度命令

安装完成后,可以使用以下命令启动at守护程序:

sudo systemctl enable --now atd.service

如何在linux上使用at和batch来调度命令

在Manjaro上,使用以下命令安装:

sudo pacman -Sy at

如何在linux上使用at和batch来调度命令

安装完成后,键入以下命令启动at守护程序:

sudo systemctl enable --now atd.service

如何在linux上使用at和batch来调度命令

在任何发行版上,都可以键入以下命令以确保atd守护程序正在运行:

ps -e | grep atd

如何在linux上使用at和batch来调度命令

如何交互使用at命令

要使用at,必须为其指定运行的日期和时间。编写这些代码的方式有很大的灵活性,我们将在本文后面介绍。

但是,即使我们将以交互方式使用at,您也必须预先提供日期和时间。如果在命令行中没有包含任何内容,或者键入的内容不是日期和时间,at将以“乱码时间”响应,如下所示:

at at banana

如何在linux上使用at和batch来调度命令

日期和时间可以是明确的,也可以是相对的。例如,假设您希望在一分钟后执行一个命令。at知道“now”是什么意思,所以您可以使用now并在其中添加一分钟,如下所示:

at now + 1 minute

如何在linux上使用at和batch来调度命令

at打印出消息和at提示符,并等待您键入要调度的命令。不过,首先要考虑以下信息:

如何在linux上使用at和batch来调度命令

它告诉您至少启动一个sh shell实例,并在其中运行命令。您的命令不会在bashshell中执行,bashshell与shshell兼容,但具有更丰富的特性集。

如果您的命令或脚本尝试使用Bash提供的函数或工具,但sh没有,它们将失败。

很容易测试您的命令或脚本是否将在sh中运行。使用sh命令启动sh shell:

sh

如何在linux上使用at和batch来调度命令

命令提示符变为美元符号($),现在可以运行命令并验证它们是否正确运行。

要返回Bash shell,请键入exit命令:

exit

您将看不到来自命令的任何标准输出或错误消息。这是因为sh shell作为后台任务启动,运行时没有任何屏幕界面。

命令输出的好坏都会通过电子邮件发送给您。它通过内部邮件系统发送给运行at命令的人。这意味着您必须设置和配置内部电子邮件系统。

许多(大多数)Linux系统没有内部电子邮件系统,因为很少需要。那些通常使用sendmail或postfix这样的系统。如果您的系统没有内部电子邮件系统,您可以让脚本写入文件或将输出重定向到文件以添加日志记录。

如果命令没有生成任何标准输出或错误消息,那么无论如何,您将不会收到电子邮件。许多Linux命令都是通过沉默来表示成功的,所以在大多数情况下,您不会收到电子邮件。

相关:Linux上的stdin、stdout和stderr是什么?

现在,是时候在中键入命令了。对于本例,我们将使用一个名为扫描.sh删除*.bak、*.tmp和*.o文件。键入命令的路径,如下所示,然后按Enter键。

如何在linux上使用at和batch来调度命令

另一个命令提示符出现,您可以添加任意数量的命令。通常,将命令放在一个脚本中并从中调用该脚本会更方便。

按Ctrl+D告诉at您已完成添加命令。at显示<EOT>,表示传输结束。系统会告诉您作业编号以及作业计划运行的时间,如下所示:

如何在linux上使用at和batch来调度命令

作业执行后,键入以下内容以检查内部邮件:

mail

如何在linux上使用at和batch来调度命令

如果没有邮件,你必须假设成功。当然,在本例中,您可以检查并查看*.bak、*.tmp和*.o文件是否已被删除,以确认命令是否有效。

键入以下内容以再次运行整个过程:

at now + 1 minute

如何在linux上使用at和batch来调度命令

一分钟后,键入以下内容以重新检查邮件:

mail

如何在linux上使用at和batch来调度命令

嘿,我们收到邮件了!要阅读第一条信息,请按1,然后按Enter。

如何在linux上使用at和batch来调度命令

我们收到了来自的电子邮件,因为脚本中的命令生成了错误消息。在本例中,没有要删除的文件,因为我们以前运行脚本时,它删除了这些文件。

按D+Enter键删除电子邮件,按Q+Enter键退出邮件程序。

日期和时间格式

在使用时间格式时,您有很大的灵活性。以下是几个例子:

  • Run at 11:00 a.m.:
    • 上午11点
  • Run at 11:00 a.m. tomorrow:
    • 明天上午11点
  • Run at 11:00 a.m. on this day next week:
    • 下周上午11点
  • Run at this time, on this day, next week:
    • 下周
  • Run at 11:00 a.m. next Friday:
    • 下周五上午11点
  • Run at this time next Friday:
    • 下周五
  • Run at 11:00 a.m. on this date, next month:
    • 下个月上午11点
  • Run at 11:00 a.m. on a specific date:
    • 2020年3月15日上午11:00
  • Run 30 minutes from now:
    • 现在+30分钟
  • Run two hours from now:
    • 现在+2小时
  • Run at this time tomorrow:
    • 在明天
  • Run at this time on Thursday:
    • 星期四
  • Run at 12:00 a.m.:
    • 午夜时分
  • Run at 12:00 p.m.:
    • 中午
  • If you’re a Brit, you can even schedule a command to run at teatime (4 p.m.):
    • 茶点时间

查看作业队列

您可以键入atq命令来查看计划作业的队列,如下所示。

如何在linux上使用at和batch来调度命令

对于队列中的每个命令,atq显示以下信息:

  • 作业ID
  • 预定日期
  • 预定的时间
  • 作业所在的队列。队列被标记为“a”、“b”等。用at调度的普通任务进入队列“a”,而用batch调度的任务(本文后面将介绍)进入队列“b”
  • 安排工作的人。

在命令行上使用at

您不必以交互方式使用at;也可以在命令上使用它。这使得在脚本中使用更容易。

您可以将命令导入at,如下所示:

echo "sh ~/sweep.sh" | at 08:45 AM

如何在linux上使用at和batch来调度命令

作业由at接受并安排,作业编号和执行日期与以前一样报告。

相关:如何在Linux上使用管道

在命令文件中使用at

您还可以在文件中存储一系列命令,然后将其传递给at。它可以是命令的纯文本文件,而不必是可执行脚本。

可以按以下方式使用-f(文件)选项将文件名传递给:

at now + 5 minutes -f clean.txt

如何在linux上使用at和batch来调度命令

如果将文件重定向到以下位置,则可以获得相同的结果:

at now + 5 minutes < clean.txt

如何在linux上使用at和batch来调度命令

从队列中删除计划作业

要从队列中删除计划作业,可以使用atrm命令。如果要首先查看队列以查找要删除的作业的编号,可以使用atq。然后,将该作业编号与atrm一起使用,如下所示:

atq atrm 11 atq

如何在linux上使用at和batch来调度命令

如何查看作业的详细视图

如前所述,您可以将作业安排到遥远的将来。有时候,你可能会忘记一份工作要做什么。atq命令显示队列中的作业,但不显示它们将要执行的操作。如果要查看作业的详细视图,可以使用-c(cat)选项。

首先,我们将使用atq查找工号:

atq

如何在linux上使用at和batch来调度命令

现在,我们将作业编号13与-c选项一起使用:

at -c 13

如何在linux上使用at和batch来调度命令

以下是我们得到的关于这份工作的详细信息:

  • 第一行:这告诉我们命令将在sh shell下运行。
  • 第二行:我们看到命令将在用户和组ID都为1000的情况下运行。这些是运行at命令的人的值。
  • 第三行:收到任何电子邮件的人。
  • 第四行:用户掩码是22。这是用于设置在此sh会话中创建的任何文件的默认权限的掩码。掩码从666中减去,得到644(八进制等价于rw-r--r--)。
  • 剩余数据:大多数是环境变量。

如何在linux上使用at和batch来调度命令

  • 测试的结果。测试检查以确保可以访问执行目录。如果不能,则会引发错误,并放弃作业执行。
  • 要执行的命令。将列出这些命令,并显示计划的脚本的内容。注意,尽管上面示例中的脚本是在Bash下运行的,但它仍将在sh shell中执行。

批处理命令

批处理命令的操作与at命令类似,但有三个显著区别:

  1. 只能以交互方式使用批处理命令。
  2. 您可以将作业添加到队列中,当系统的平均负载低于1.5时,批处理命令将执行作业,而不是将作业安排在特定时间执行。
  3. 由于上述原因,您从不使用批处理命令指定日期和时间。

使用批处理命令时,按名称调用它,不带命令行参数,如下所示:

batch

接下来,像使用at命令一样添加任务。

控制对at命令的访问

这个允许以及拒绝文件控制谁可以使用at系列命令。它们位于/etc目录中。默认情况下,只有拒绝文件存在,它是在安装时创建的。

以下是它们的工作原理:

  • 拒绝:列出无法在处使用来计划作业的应用程序和实体。
  • 允许:列出可以使用at来安排作业的人员。如果允许文件不存在,至少只使用拒绝文件。

默认情况下,任何人都可以使用。如果要限制谁可以使用它,请使用允许列出那些可以的人。这比将不能使用at的所有人添加到拒绝文件。

这是你的想法拒绝文件看起来像:

sudo less /etc/at.deny

如何在linux上使用at和batch来调度命令

该文件列出了操作系统中不能在上使用的组件。由于安全原因,这些文件中的许多都被阻止这样做,因此您不想从文件中删除任何文件。

如何在linux上使用at和batch来调度命令

现在,我们将编辑允许文件。我们要加上戴夫和玛丽,但不允许其他人使用。

首先,我们键入以下内容:

sudo gedit /etc/at.allow

如何在linux上使用at和batch来调度命令

在编辑器中,我们添加两个名称,如下所示,然后保存文件。

如何在linux上使用at和batch来调度命令

如果有人试图使用at,他会被告知没有权限。例如,假设一个名为eric的用户键入以下内容:

at

他将被拒绝,如下所示。

如何在linux上使用at和batch来调度命令

再说一遍,埃里克不在办公室拒绝文件。一旦你把任何人放进允许任何其他人都被拒绝使用。

一次性很好

如您所见,at和batch都非常适合只需运行一次的任务。再次快速回顾:

  • 当你需要做一些非常规的事情时,用at来安排它。
  • 如果希望仅在系统负载足够低时运行任务,请使用批处理。

  • 发表于 2021-04-02 18:33
  • 阅读 ( 185 )
  • 分类:互联网

你可能感兴趣的文章

如何在任何使用python的计算机上安装selenium webdriver

...lenium WebDriver。在本文中,我们将简要介绍Selenium,并提供如何在系统上安装Selenium WebDriver的详细指南。 ...

  • 发布于 2021-03-10 21:27
  • 阅读 ( 471 )

2021年面向开发者、云工程师和devops的5大linux课程

... 本课程将带您了解Linux的“如何”和“为什么”,并展示各种Linux命令的工作方式、它们的真实结构以及记住这些命令的正确方法。 ...

  • 发布于 2021-03-11 10:29
  • 阅读 ( 246 )

您应该知道的基本windows cmd命令

...符不仅要有一个命令词典,还要了解每个参数的含义以及如何将不同的参数组合起来以达到预期的效果。 ...

  • 发布于 2021-03-15 18:07
  • 阅读 ( 325 )

4个linux自动化应用程序,简化您的任务和工作流

...,那么很简单:创建您一直键入的内容的片段,然后选择如何触发它们。它可以是热键或缩写。例如,输入“adr”可以扩展到输入您的家庭地址。 ...

  • 发布于 2021-03-21 21:10
  • 阅读 ( 258 )

如何通过五个简单步骤创建批处理(bat)文件

... 在本文中,您将学习如何编写一个简单的批处理文件。您将学习批处理文件的基本功能以及如何自己编写它们。我还将为您提供学习编写批处理(BAT)文件的更多资源。 ...

  • 发布于 2021-03-23 08:09
  • 阅读 ( 247 )

如何在linux上杀死僵尸进程

...好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。 进程状态如何在linux上工作 当然,Linux必须跟踪计算机上运行的所有应用程序和守护进程。其中一种方法是维护进程表。这是内...

  • 发布于 2021-04-01 07:47
  • 阅读 ( 233 )

如何检查linux上安装了哪个gpu

需要识别Linux计算机中的图形处理单元(GPU)吗?下面是如何从命令行和GNOME中识别图形卡。 第一步 你可能去过那里。你被征召来为一个非技术性的亲戚或同事提供支持,有些事情告诉你这不是无痛的。不过,你还是加入了!...

  • 发布于 2021-04-02 16:40
  • 阅读 ( 235 )

如何在linux上使用chown命令

Linux系统中的文件和目录都属于某个人。您可以使用chown命令更改它们的所有权。我们教你怎么做。 每个文件都属于一个用户和一个组 Linux是一个多用户系统。操作系统允许定义多个用户帐户,并允许任何有效用户登录到计算...

  • 发布于 2021-04-03 05:00
  • 阅读 ( 160 )

如何更改默认crontab编辑器

...您选择的编辑器而不是相反的方式吗?本教程将向您展示如何。这些指令适用于Linux、macOS和其他类似Unix的操作系统。 文本编辑的敏感话题 文本编辑器执行一项非常平凡的任务。然而,人们对编辑个人喜好的深切感受导致了自...

  • 发布于 2021-04-03 16:23
  • 阅读 ( 144 )

我可以使用任务调度器来监视我的计算机的电池吗?

...驱动的问答网站分组。 问题 超级用户阅读器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...

  • 发布于 2021-04-08 11:04
  • 阅读 ( 258 )
roypfapoh
roypfapoh

0 篇文章

相关推荐