如何在Linux中的特定时间运行命令

系统 Linux
有一天,我使用 rsync 将大文件传输到局域网上的另一个系统。由于它是非常大的文件,大约需要 20 分钟才能完成。我不想再等了,我也不想按 CTRL+C 来终止这个过程。我只是想知道在类 Unix 操作系统中是否有简单的方法可以在特定的时间运行一个命令,并且一旦超时就自动杀死它 —— 因此有了这篇文章。请继续阅读。

https://s4.51cto.com/oss/201807/02/3f0132d623ecd18f97f78a0b09a9cf19.png

有一天,我使用 rsync 将大文件传输到局域网上的另一个系统。由于它是非常大的文件,大约需要 20 分钟才能完成。我不想再等了,我也不想按 CTRL+C 来终止这个过程。我只是想知道在类 Unix 操作系统中是否有简单的方法可以在特定的时间运行一个命令,并且一旦超时就自动杀死它 —— 因此有了这篇文章。请继续阅读。

 

在 Linux 中在特定时间运行命令

我们可以用两种方法做到这一点。

 

方法 1 - 使用 timeout 命令

最常用的方法是使用 timeout 命令。对于那些不知道的人来说,timeout 命令会有效地限制一个进程的绝对执行时间。timeout 命令是 GNU coreutils 包的一部分,因此它预装在所有 GNU/Linux 系统中。

假设你只想运行一个命令 5 秒钟,然后杀死它。为此,我们使用:

  1. $ timeout <time-limit-interval> <command>

例如,以下命令将在 10 秒后终止。

  1. $ timeout 10s tail -f /var/log/pacman.log

你也可以不用在秒数后加后缀 s。以下命令与上面的相同。

  1. $ timeout 10 tail -f /var/log/pacman.log

其他可用的后缀有:

  • m 代表分钟。
  • h 代表小时。
  • d 代表天。

如果你运行这个 tail -f /var/log/pacman.log 命令,它将继续运行,直到你按 CTRL+C 手动结束它。但是,如果你使用 timeout 命令运行它,它将在给定的时间间隔后自动终止。如果该命令在超时后仍在运行,则可以发送 kill 信号,如下所示。

  1. $ timeout -k 20 10 tail -f /var/log/pacman.log

在这种情况下,如果 tail 命令在 10 秒后仍然运行,timeout 命令将在 20 秒后发送一个 kill 信号并结束。

有关更多详细信息,请查看手册页。

  1. $ man timeout

有时,某个特定程序可能需要很长时间才能完成并最终冻结你的系统。在这种情况下,你可以使用此技巧在特定时间后自动结束该进程。

另外,可以考虑使用 cpulimit,一个简单的限制进程的 CPU 使用率的程序。有关更多详细信息,请查看下面的链接。

 

方法 2 - 使用 timelimit 程序

timelimit 使用提供的参数执行给定的命令,并在给定的时间后使用给定的信号终止进程。首先,它会发送警告信号,然后在超时后发送 kill 信号。

timeout 不同,timelimit 有更多选项。你可以传递参数数量,如 killsigwarnsigkilltimewarntime 等。它存在于基于 Debian 的系统的默认仓库中。所以,你可以使用命令来安装它:

  1. $ sudo apt-get install timelimit

对于基于 Arch 的系统,它在 AUR 中存在。因此,你可以使用任何 AUR 助手进行安装,例如 PacaurPackerYayYaourt 等。

对于其他发行版,请在这里下载源码并手动安装。安装 timelimit 后,运行下面的命令执行一段特定的时间,例如 10 秒钟:

  1. $ timelimit -t10 tail -f /var/log/pacman.log

如果不带任何参数运行 timelimit,它将使用默认值:warntime=3600 秒、warnsig=15 秒、killtime=120 秒、killsig=9。有关更多详细信息,请参阅本指南***给出的手册页和项目网站。

  1. $ man timelimit

今天就是这些。我希望对你有用。还有更好的东西。敬请关注! 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2021-06-10 09:56:09

Linux命令shell

2017-02-06 18:00:26

Linuxsudo命令

2023-03-07 10:50:42

Linux命令系统

2020-06-22 07:58:02

Linux命令时间限制

2019-03-22 09:20:45

Linux命令sudo

2022-10-08 08:31:09

Linuxsudo

2020-04-06 11:47:44

Linux命令脚本

2024-05-31 12:54:37

.NET CoreLinux语言

2011-01-26 13:26:32

Linux进程

2023-02-07 09:49:26

Linux命令行合并文件

2020-04-17 08:00:22

Docker命令普通用户

2022-01-21 10:58:39

JavaScriptGolangPython

2009-08-06 20:14:16

linux命令行模式linux命令行修改系统时间

2020-08-28 07:00:00

WSLLinuxWindows 10

2022-12-26 17:23:06

Linuxhistory命令

2018-02-23 09:32:13

LinuxUnixntpd

2017-09-18 10:05:15

WindowsLinux容器

2016-12-01 15:43:41

Linuxls命令

2016-11-02 09:49:21

Linux命令进程

2018-03-26 10:20:13

点赞
收藏

51CTO技术栈公众号