前几天,我正在使用 rsync 将一个大文件传输到局域网上的另一个系统。 由于文件非常大,大约需要 20 分钟才能完成。 我不想等待那么久,也不想通过按 CTRL+C 手动终止进程。 我只是想知道是否有任何简单的方法可以在特定时间运行命令并在类 Unix 操作系统中时间到时自动终止它 – 因此这篇文章。 继续阅读。
在 Linux 中运行特定时间的命令
我们可以通过两种方法做到这一点。
方法 1 – 使用“超时”命令
最常用的方法是使用 暂停 为此目的的命令。 对于不知道的人来说,timeout 命令会有效地限制一个进程的绝对执行时间。 timeout 命令是 GNU coreutils 软件包的一部分,因此它预装在所有 GNU/Linux 系统中。
假设您只想在特定时间运行命令,然后在时间过去后自动终止它。 为此,我们使用:
$ 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’ 好几天。
如果你运行这个 尾 -f /var/log/pacman.log 命令,它将一直运行,直到您按 CTRL+C 手动结束它。 但是,如果您将其与 暂停 命令,它将在给定的时间间隔后自动杀死。
以防万一命令在超时后仍在运行,您可以发送 杀 如下所示的信号。
$ timeout -k 20 10 tail -f /var/log/pacman.log
在这种情况下,如果你的 tail 命令在 10 秒后仍然运行,超时命令将在 20 秒后发送一个终止信号并结束它。
Tmeout 命令在解决硬件问题时特别有用。 例如,运行以下命令以显示来自内核环形缓冲区的所有消息,但仅显示 10 秒。
$ timeout 10 dmesg -w
有关更多详细信息,请查看手册页。
$ man timeout
有时,特定程序可能需要很长时间才能完成并最终冻结您的系统。 在这种情况下,您可以使用此技巧在特定时间后自动结束该过程。
另外,考虑使用 Cpulimit ,一个简单的应用程序来限制进程的 CPU 使用率。 有关更多详细信息,请查看以下链接。
- 如何在 Linux 中限制进程的 CPU 使用率
方法 2 – 使用“Timelimit”程序
Timelimit 实用程序使用提供的参数执行给定命令,并在给定时间后使用给定信号终止生成的进程。 首先,它将通过 警告 信号,然后超时后,它会发送 杀 信号。
与 timeout 实用程序不同,Timelimit 有更多选项。 您可以传递多个参数,例如 killsig、warnsig、killtime、warntime 等。
它在基于 Debian 的系统的默认存储库中可用。 因此,您可以使用以下命令安装它:
$ sudo apt-get install timelimit
对于基于 Arch 的系统,它在 AUR 中可用。 因此,您可以使用任何 AUR 帮助程序安装它,例如 帕考尔, 打包机, 耶, 酸奶 等等。
对于其他发行版,请下载源代码 从这里 并手动安装它。
安装 Timelimit 程序后,在特定时间运行以下命令,例如 10 秒:
$ timelimit -t10 tail -f /var/log/pacman.log
如果您在没有任何参数的情况下运行 timelimit,它将使用默认值: 警告时间=3600 秒, 警告=15, 杀死时间=120, 杀死信号 = 9.
有关更多详细信息,请参阅本指南末尾提供的手册页和项目网站。
$ man timelimit
而且,这就是今天的全部内容。 我希望这很有用。 更多好东西即将到来。 敬请关注!
干杯!
资源:
- 限时网站
感谢您的光临!
帮助我们帮助您:
- 订阅我们的电子邮件通讯: 立即注册
- 支持 OSTechNix: 通过贝宝捐款
- 下载免费的电子书和视频: TradePub 上的 OSTechNix
- 联系我们: Facebook | 推特 | 谷歌加 | 领英 | RSS订阅
祝你有美好的一天!!
CLILinux针对特定时间运行命令TimelimitTimeout