如何在Linux中运行命令一段特定时间
前几天,我使用rsync将大文件传输到局域网上的另一个系统。
由于文件很大,因此大约需要20分钟才能完成。
我不想等待那么久,也不想通过按CTRL + C来手动终止该过程。
是否有任何简单的方法可以在特定时间运行命令并在类似Unix的操作系统中将时间自动终止后自动将其杀死?
在Linux中运行命令一段时间
我们可以通过两种方法来做到这一点。
方法1:使用“timeout”命令
为此,最常用的方法是使用超时命令。
对于那些不知道的人,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 天。
如果运行该tail -f /var/log/pacman.log命令,它将一直运行,直到我们通过按CTRL + C手动结束它为止。
但是,如果将其与timeout命令一起运行,它将在给定的时间间隔后自动终止。
以防万一即使超时后命令仍在运行,我们可以发送如下所示的终止信号。
$timeout -k 20 10 tail -f /var/log/pacman.log
在这种情况下,如果tail命令在10秒钟后仍在运行,则timeout命令将在20秒钟后向其发送终止信号并结束。
在对硬件问题进行故障排除时,Tmeout命令可能特别有用。
例如,运行以下命令以显示来自内核环形缓冲区的所有消息,但仅显示10秒钟。
$timeout 10 dmesg -w
有关更多详细信息,请查看手册页。
$man timeout
有时,特定程序可能需要很长时间才能完成并最终冻结系统。
在这种情况下,我们可以使用此技巧在特定时间后自动结束该过程。
另外,请考虑使用Cpulimit(一个简单的应用程序)来限制进程的CPU使用率。
方法2:使用“timelimit”程序
Timelimit实用程序使用提供的参数执行给定的命令,并在给定的时间后以给定的信号终止生成的过程。
首先,它将传递警告信号,然后在超时后,它将发送终止信号。
与timeout实用程序不同,“timelimit”具有更多选项。
我们可以传递一些参数,例如killsig,warnsig,killtime,warntime等。
它在基于Debian的系统的默认存储库中可用。
因此,我们可以使用以下命令进行安装:
$sudo apt-get install timelimit
对于基于Arch的系统,它在AUR中可用。
因此,我们可以使用任何AUR帮助程序来安装它,例如Pacaur,Packer,Yay,Yaourt等。
对于其他发行版,请从此处下载源代码并手动安装。
安装Timelimit程序后,在特定时间(例如10秒)内运行以下命令:
$timelimit -t10 tail -f /var/log/pacman.log
如果运行不带任何参数的时间限制,它将使用默认值:warntime = 3600秒,warnsig = 15,killtime = 120,killsig = 9.
有关更多详细信息,请参阅本教程末尾的手册页和项目。
$man timelimit