云网牛站
所在位置:首页 > Linux命令 > Linux系统中在特定时间内运行命令的方法

Linux系统中在特定时间内运行命令的方法

2019-02-25 21:19:40作者:戴进稿源:云网牛站

本文介绍在Linux系统中运行特定时间的命令,有两种方法,使用timeout命令或Timelimit程序。

Linux系统中在特定时间内运行命令的方法

 

背景

前几天我使用rsync将一个大文件传输到我所在局域网的另一个系统。由于它是一个非常大的文件,大约需要20分钟才能完成。我不想再等那么久了,而且我也不想通过按CTRL+C来手动终止进程,我只是想知道是否有任何简单的方法可以在特定时间内运行命令并在类Unix操作系统中出现时自动终止它,以下将提供在Linux系统中运行特定时间的命令的两种方法。

 

方法一、使用timeout命令

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

你只想在特定时间运行命令,然后在时间过后自动终止它,为此,我们使用:

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

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

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

Linux系统中在特定时间内运行命令的方法

你也不必为秒指定后缀“s”,以下命令与上述相同:

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

其它可用的后缀是:

‘m’ for minutes,

‘h’ for hours

‘d’ for days.

如果运行此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

参考:timeout命令_Linux timeout命令使用详解:在指定时间后仍运行则杀死该进程

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

 

方法二、使用Timelimit程序

Timelimit实用程序使用提供的参数执行给定命令,并在给定时间后使用给定信号终止生成的进程,首先,它将通过警告信号,然后在超时后,它将发送终止信号。

与超时实用程序不同,Timelimit有更多选项,你可以传递多个参数,例如killsig、warnsig、killtime、warntime等。

它在基于Debian的系统的默认存储库中可用,因此,你可以使用命令安装它:

$ sudo apt-get install timelimit

对于基于Arch的系统,可在AUR中使用,因此,你可以使用任何AUR帮助程序安装它,例如Pacaur、Packer、Yay、Yaourt等,参考安装及使用Arch Linux/Manjaro系统中的AUR助手yay

安装Timelimit程序后,运行以下命令一段特定时间,例如10秒:

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

如果你运行timelimit而没有任何参数,它将使用默认值:warntime=3600秒、warnsig=15、 killtime=120、killsig=9。

有关更多详细信息,请运行以下命令:

$ man timelimit

 

相关主题

man命令_Linux man命令使用详解:查看Linux中的指令帮助

Linux命令子频道
精选文章
热门文章