mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-29 21:41:00 +08:00
PRF
@MjSeven
This commit is contained in:
parent
eb860efb52
commit
d2a7bb8ebf
@ -1,41 +1,42 @@
|
|||||||
[#]: collector: (lujun9972)
|
[#]: collector: (lujun9972)
|
||||||
[#]: translator: (MjSeven)
|
[#]: translator: (MjSeven)
|
||||||
[#]: reviewer: ( )
|
[#]: reviewer: (wxy)
|
||||||
[#]: publisher: ( )
|
[#]: publisher: ( )
|
||||||
[#]: url: ( )
|
[#]: url: ( )
|
||||||
[#]: subject: (Scheduling tasks on Linux using the at command)
|
[#]: subject: (Scheduling tasks on Linux using the at command)
|
||||||
[#]: via: (https://www.networkworld.com/article/3535808/scheduling-tasks-on-linux-using-the-at-command.html)
|
[#]: via: (https://www.networkworld.com/article/3535808/scheduling-tasks-on-linux-using-the-at-command.html)
|
||||||
[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
|
[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
|
||||||
|
|
||||||
使用 at 命令在 Linu 上安排任务
|
使用 at 命令在 Linux 上安排任务
|
||||||
======
|
======
|
||||||
at 命令可以很容易地安排 Linux 任务在你选择的任何时间或日期运行,让我们来看看它能为你做什么。
|
|
||||||
![][0]
|
|
||||||
romkaz / Getty Images
|
|
||||||
|
|
||||||
当你希望命令或脚本在某个特定时间运行时,你不需要将手指放在键盘上盘旋等待按下回车键,或者是在特定时间坐在办公桌前。相反,你可以通过 **at** 命令来设置任务。在本文中,我们将研究如何使用 **at** 来安排任务,如何精确地选择任务希望运行的时间以及如何使用 **at** 来查看安排运行的任务。
|
> at 命令可以很容易地安排 Linux 任务在你选择的任何时间或日期运行,让我们来看看它能为你做什么。
|
||||||
|
|
||||||
|
![][0]
|
||||||
|
|
||||||
|
当你希望命令或脚本在某个特定时间运行时,你不需要将手指放在键盘上盘旋等待按下回车键,或者是在特定时间坐在办公桌前。相反,你可以通过 `at` 命令来设置任务。在本文中,我们将研究如何使用 `at` 来安排任务,如何精确地选择任务希望运行的时间,以及如何使用 `at` 来查看安排运行的任务。
|
||||||
|
|
||||||
### at vs cron
|
### at vs cron
|
||||||
|
|
||||||
对于那些使用 **cron** 在 Linux 系统上安排任务的人来说,**at** 命令类似于 **cron**,因为你可以在选定的时间调度任务,但是 **cron** 用于定期运行的作业 - 甚至是每年仅一次。大多数 **cron** 作业的频率都设置为每天、每周或每月运行一次,不过你可以控制运行的频率和时间。
|
对于那些使用 cron 在 Linux 系统上安排任务的人来说,`at` 命令类似于 cron,因为你可以在选定的时间调度任务,但是 cron 用于定期运行的作业 —— 甚至是每年仅一次。大多数 cron 作业的频率都设置为每天、每周或每月运行一次,不过你可以控制运行的频率和时间。
|
||||||
|
|
||||||
另一方面,**at** 命令用于仅运行一次的任务。想在午夜重启系统?没问题,假设你有适当的权限,**at** 可以为你完成此操作。如果你希望系统在每个星期六凌晨 2 点重启,那么改用 **cron**。
|
另一方面,`at` 命令用于仅运行一次的任务。想在午夜重启系统?没问题,只要你有适当的权限,`at` 可以为你完成此操作。如果你希望系统在每个星期六凌晨 2 点重启,那么改用 cron。
|
||||||
|
|
||||||
### 使用 at
|
### 使用 at
|
||||||
|
|
||||||
**at** 命令很容易使用,只需记住几件事。一个简单使用 **at** 的例子类似于这样:
|
`at` 命令很容易使用,只需记住几件事。一个简单使用 `at` 的例子类似于这样:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ at 5:00PM
|
$ at 5:00PM
|
||||||
at> date >> thisfile
|
at> date >> thisfile
|
||||||
at> <EOT>
|
at> <EOT>
|
||||||
```
|
```
|
||||||
|
|
||||||
在输入 "at" 和应该运行命令的时间,**at** 会提示你在设定时间会运行该命令(此例中是 **`date`** 命令)。输入 **^D**(Ctrl + d) 来完成请求。
|
在输入 `at` 和应该运行命令的时间,`at` 会提示你在设定时间会运行该命令(此例中是 `date` 命令)。输入 `^D`(`Ctrl + d`)来完成请求。
|
||||||
|
|
||||||
假设我们在下午 5 点之前设置这个 **at** 命令,那么日期和时间将在当天下午 5 点添加到名为 "thisfile" 文件的末尾。否则,该命令将在第二天下午 5 点运行。
|
假设我们在下午 5 点之前设置这个 `at` 命令,那么这个日期和时间将在当天下午 5 点添加到名为 `thisfile` 文件的末尾。否则,该命令将在第二天下午 5 点运行。
|
||||||
|
|
||||||
与 **at** 命令进行交互时,可以输入多个命令。如果你要同时运行多个命令,只需输入多个命令行即可:
|
与 `at` 命令进行交互时,可以输入多个命令。如果你要同时运行多个命令,只需输入多个命令行即可:
|
||||||
[][1]
|
|
||||||
|
|
||||||
```
|
```
|
||||||
$ at 6:22
|
$ at 6:22
|
||||||
@ -45,9 +46,9 @@ at> echo second >> thisfile
|
|||||||
at> <EOT>
|
at> <EOT>
|
||||||
```
|
```
|
||||||
|
|
||||||
在上面的命令中,我们使用了一个普通的用户账户,将一些简单的文本添加到该用户主目录的文件中。如果在上午 6:22 之后运行这些命令,那么命令会在第二天运行,因为 6:22 表示上午 6:22。如果你想在下午 6:22 运行,使用 6:22 PM 或者 18:22,"6:22 PM" 也可以。
|
在上面的命令中,我们使用了一个普通的用户账户,将一些简单的文本添加到该用户主目录的文件中。如果在上午 6:22 之后运行这些命令,那么命令会在第二天运行,因为 6:22 表示上午 6:22。如果你想在下午 6:22 运行,使用 `6:22 PM` 或者 `18:22`。`6:22 PM` 这样也是可以工作的。
|
||||||
|
|
||||||
你也可以通过使用 **at** 来安排命令在指定的日期或时间运行,例如 "10:00AM April 15 2021" 或 "noon + 5 days"(从今天起 5 天内的中午运行),以下是一些例子:
|
你也可以通过使用 `at` 来安排命令在指定的日期或时间运行,例如 `10:00AM April 15 2021` 或 `noon + 5 days`(从今天起 5 天内的中午运行),以下是一些例子:
|
||||||
|
|
||||||
```
|
```
|
||||||
at 6PM tomorrow
|
at 6PM tomorrow
|
||||||
@ -56,7 +57,8 @@ at noon + 5 days
|
|||||||
at 9:15 + 1000 days
|
at 9:15 + 1000 days
|
||||||
```
|
```
|
||||||
|
|
||||||
在指定要运行的命令并按下 **^D** 后,你会注意到 **at** 命令为每个请求分配了一个作业编号,这个数字将显示在 **at** 命令的作业队列中。
|
在指定要运行的命令并按下 `^D` 后,你会注意到 `at` 命令为每个请求分配了一个作业编号,这个数字将显示在 `at` 命令的作业队列中。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ at noon + 1000 days
|
$ at noon + 1000 days
|
||||||
warning: commands will be executed using /bin/sh
|
warning: commands will be executed using /bin/sh
|
||||||
@ -67,7 +69,8 @@ job 36 at Tue Dec 27 12:00:00 2022 <== job # is 36
|
|||||||
|
|
||||||
### 检查队列
|
### 检查队列
|
||||||
|
|
||||||
你可以使用 **atq**(at queue) 命令来查看 **at** 作业队列:
|
你可以使用 `atq`(at queue)命令来查看 `at` 作业队列:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ atq
|
$ atq
|
||||||
32 Thu Apr 2 03:06:00 2020 a shs
|
32 Thu Apr 2 03:06:00 2020 a shs
|
||||||
@ -76,7 +79,8 @@ $ atq
|
|||||||
34 Thu Apr 2 18:00:00 2020 a shs
|
34 Thu Apr 2 18:00:00 2020 a shs
|
||||||
```
|
```
|
||||||
|
|
||||||
如果你需要取消队列中的一个作业,使用 **atrm**(at remote) 命令和作业编号:
|
如果你需要取消队列中的一个作业,使用 `atrm`(at remove)命令和作业编号:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ atrm 32
|
$ atrm 32
|
||||||
$ atq
|
$ atq
|
||||||
@ -85,7 +89,8 @@ $ atq
|
|||||||
34 Thu Apr 2 18:00:00 2020 a shs
|
34 Thu Apr 2 18:00:00 2020 a shs
|
||||||
```
|
```
|
||||||
|
|
||||||
你可以使用 **at -c** 命令来查看安排任务的详细信息,其它详细信息(活动的搜索路径等)也可以,但是输出的最后一行将显示计划运行的命令。
|
你可以使用 `at -c` 命令来查看安排任务的详细信息,其它详细信息(活动的搜索路径等)也可以看到,但是输出的最后一行将显示计划运行的命令。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ at -c 36 | tail -6
|
$ at -c 36 | tail -6
|
||||||
cd /home/shs || {
|
cd /home/shs || {
|
||||||
@ -95,11 +100,12 @@ cd /home/shs || {
|
|||||||
date >> thisfile
|
date >> thisfile
|
||||||
```
|
```
|
||||||
|
|
||||||
注意,命令首先会测试是否可以通过 **cd** 命令进入用户目录。如果不可以,作业将退出并显示错误。如果可以,则运行在 **at** 中指定的命令。它将命令视为 “进入 /home/shs 或退出并显示错误”。
|
注意,该命令显示首先会测试是否可以通过 `cd` 命令进入用户目录。如果不可以,作业将退出并显示错误。如果可以,则运行在 `at` 中指定的命令。它将命令视为 “进入 `/home/shs` 或退出并显示错误”。
|
||||||
|
|
||||||
### 以 root 身份运行作业
|
### 以 root 身份运行作业
|
||||||
|
|
||||||
要以 root 身份运行 **at** 作业,只需将 **sudo** 与你的 **at** 命令一起使用,如下所示:
|
要以 root 身份运行 `at` 作业,只需将 `sudo` 与你的 `at` 命令一起使用,如下所示:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo at 8PM
|
$ sudo at 8PM
|
||||||
[sudo] password for shs:
|
[sudo] password for shs:
|
||||||
@ -109,7 +115,8 @@ at> <EOT>
|
|||||||
job 37 at Wed Apr 1 16:00:00 2020
|
job 37 at Wed Apr 1 16:00:00 2020
|
||||||
```
|
```
|
||||||
|
|
||||||
注意,root 的任务以 **root** 作为执行者显示在队列中。
|
注意,root 的任务以 `root` 作为执行者显示在队列中。
|
||||||
|
|
||||||
```
|
```
|
||||||
35 Mon Apr 6 12:00:00 2020 a shs
|
35 Mon Apr 6 12:00:00 2020 a shs
|
||||||
36 Tue Dec 27 12:00:00 2022 a shs
|
36 Tue Dec 27 12:00:00 2022 a shs
|
||||||
@ -118,7 +125,8 @@ job 37 at Wed Apr 1 16:00:00 2020
|
|||||||
|
|
||||||
### 运行脚本
|
### 运行脚本
|
||||||
|
|
||||||
你还可以使用 **at** 命令来运行脚本,这里有一个例子:
|
你还可以使用 `at` 命令来运行脚本,这里有一个例子:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ at 4:30PM
|
$ at 4:30PM
|
||||||
warning: commands will be executed using /bin/sh
|
warning: commands will be executed using /bin/sh
|
||||||
@ -128,11 +136,11 @@ at> <EOT>
|
|||||||
|
|
||||||
### 禁止使用 at 命令
|
### 禁止使用 at 命令
|
||||||
|
|
||||||
**/etc/at.deny** 文件提供了一种禁止用户使用 **at** 命令的方法。默认情况下,它可能会包含一个不允许的账户列表,例如 **ftp** 和 **nobody**。可以使用 **/etc/at.allow** 文件执行相反的操作,但是通常只配置 **at.deny** 文件。
|
`/etc/at.deny` 文件提供了一种禁止用户使用 `at` 命令的方法。默认情况下,它可能会包含一个不允许的账户列表,例如 `ftp` 和 `nobody`。可以使用 `/etc/at.allow` 文件执行相反的操作,但是通常只配置 `at.deny` 文件。
|
||||||
|
|
||||||
**总结**
|
### 总结
|
||||||
|
|
||||||
当你要安排一项一次性任务时,无论你是希望在今天下午或几年后运行,**at** 命令都是通用且易于使用的。
|
当你要安排一项一次性任务时,无论你是希望在今天下午或几年后运行,`at` 命令都是通用且易于使用的。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -141,7 +149,7 @@ via: https://www.networkworld.com/article/3535808/scheduling-tasks-on-linux-usin
|
|||||||
作者:[Sandra Henry-Stocker][a]
|
作者:[Sandra Henry-Stocker][a]
|
||||||
选题:[lujun9972][b]
|
选题:[lujun9972][b]
|
||||||
译者:[MjSeven](https://github.com/MjSeven)
|
译者:[MjSeven](https://github.com/MjSeven)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user