如何在 Linux 中的特定时间运行命令
有一天,我使用 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
有更多选项。你可以传递参数数量,如 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
如果不带任何参数运行 timelimit
,它将使用默认值:warntime=3600
秒、warnsig=15
秒、killtime=120
秒、killsig=9
。有关更多详细信息,请参阅本指南最后给出的手册页和项目网站。
$ man timelimit
今天就是这些。我希望对你有用。还有更好的东西。敬请关注!
干杯!
资源
via: https://www.ostechnix.com/run-command-specific-time-linux/
建议继续学习:
- 查询Linux系统最后重启时间的三个方法 (阅读:3462)
- 等待的时间比你想象的更久 (阅读:2617)
- 时间time_t和string(char*)格式互转 (阅读:2554)
- Linux下如何查看系统启动时间和运行时间 (阅读:2538)
- Shell Tips: Unix 时间到字面 (阅读:2601)
- php获取文件创建时间、修改时间 (阅读:2437)
- linux 查看自己系统装于何时 (阅读:2402)
- python中对时间处理的几个函数 (阅读:2370)
- linux时间相关结构体和函数整理 (阅读:2420)
- 如何正确地处理时间 (阅读:2163)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:linux@linux.cn (linux) 来源: Linux中国开源社区
- 标签: 时间
- 发布时间:2018-07-03 14:24:46
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成