IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

Linux中国开源社区 2018-07-03 14:24:46 累计浏览 1,559 次
本机暂存

   原图已失效

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

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

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

方法 1 - 使用 timeout 命令

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

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

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

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

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

   原图已失效

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

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

   其他可用的后缀有:

  • m 代表分钟。

  • h 代表小时。

  • d 代表天。

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

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

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

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

$ man timeout

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

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

方法 2 - 使用 timelimit 程序

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

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

$ sudo apt-get install timelimit

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

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

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

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

$ man timelimit

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

   干杯!

资源


   via: https://www.ostechnix.com/run-command-specific-time-linux/

   作者:SK 译者:geekpi 校对:wxy

   本文由 LCTT 原创编译,Linux中国 荣誉推出

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Bash的模式和配置文件加载 (累计阅读 24,408)
  2. 28个Unix/Linux的命令行神器 (累计阅读 16,791)
  3. Linux如何统计进程的CPU利用率 (累计阅读 16,307)
  4. 我的 RHCA 之路 (累计阅读 14,012)
  5. 我常用的主机监控shell脚本 (累计阅读 13,429)
  6. Linux内存点滴 用户进程内存空间 (累计阅读 13,228)
  7. 给程序员新手的一些建议 (累计阅读 13,089)
  8. Linux 性能监控、测试、优化工具 (累计阅读 13,011)
  9. 关于linux内存free的一些事情 (累计阅读 12,867)
  10. ps - 按进程消耗内存多少排序 (累计阅读 12,686)