如何在 Linux 中的特定时间运行命令
创始人
2024-03-01 23:23:19
0

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

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

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

方法 1 - 使用 timeout 命令

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

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

$ timeout  

例如,以下命令将在 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中国 荣誉推出

相关内容

绝杀球被误判超时无效 余嘉...
北京时间9月14日消息,在一场西乙季前赛的比赛中,中国球员余嘉豪的...
2025-09-14 14:43:12
上海一小区被外卖员集体“拉...
外卖送货上门方便了很多人的生活 但上海一小区却被外卖员集体“拉黑”...
2025-08-06 18:13:04
ssh 登录超时 expe...
ssh -p 22 root@192.168.1.1 -v...
2025-05-29 15:17:15
捕捉连接超时和页面未找到异...
捕捉连接超时和页面未找到异常的解决方法取决于你在哪个编程语言中开发...
2025-01-12 16:30:58
捕捉Firebase 50...
当使用Firebase时,出现504网关超时错误可能是因为服务器无...
2025-01-12 16:02:00
不重置超时时长的情况下动态...
在不重置超时时长的情况下实现动态标记,可以使用一个计时器来记录标记...
2025-01-12 14:30:58

热门资讯

开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
KDE4.11 Beta1 正...   KDE 项目工作组刚刚发布了 KDE Software Compilation 4.11 Bet...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...