如何在Linux中的特定時(shí)間運(yùn)行命令
有一天,我使用 rsync 將大文件傳輸?shù)骄钟蚓W(wǎng)上的另一個(gè)系統(tǒng)。由于它是非常大的文件,大約需要 20 分鐘才能完成。我不想再等了,我也不想按 CTRL+C 來(lái)終止這個(gè)過程。我只是想知道在 Linux 操作系統(tǒng)中是否有簡(jiǎn)單的方法可以在特定的時(shí)間運(yùn)行一個(gè)命令,并且一旦超時(shí)就自動(dòng)殺死它 —— 因此有了這篇文章。請(qǐng)繼續(xù)閱讀。
在 Linux 中在特定時(shí)間運(yùn)行命令
我們可以用兩種方法做到這一點(diǎn)。
方法 1 - 使用 timeout 命令
最常用的方法是使用 timeout 命令。對(duì)于那些不知道的人來(lái)說,timeout 命令會(huì)有效地限制一個(gè)進(jìn)程的絕對(duì)執(zhí)行時(shí)間。timeout 命令是 GNU coreutils 包的一部分,因此它預(yù)裝在所有 GNU/Linux 系統(tǒng)中。
假設(shè)你只想運(yùn)行一個(gè)命令 5 秒鐘,然后殺死它。為此,我們使用:
$ timeout <time-limit-interval> <command>
例如,以下命令將在 10 秒后終止。
$ timeout 10s tail -f /var/log/pacman.log
你也可以不用在秒數(shù)后加后綴 s。以下命令與上面的相同。
$ timeout 10 tail -f /var/log/pacman.log
其他可用的后綴有:
- m 代表分鐘。
- h 代表小時(shí)。
- d 代表天。
如果你運(yùn)行這個(gè) tail -f /var/log/pacman.log 命令,它將繼續(xù)運(yùn)行,直到你按 CTRL+C 手動(dòng)結(jié)束它。但是,如果你使用 timeout 命令運(yùn)行它,它將在給定的時(shí)間間隔后自動(dòng)終止。如果該命令在超時(shí)后仍在運(yùn)行,則可以發(fā)送 kill 信號(hào),如下所示。
$ timeout -k 20 10 tail -f /var/log/pacman.log
在這種情況下,如果 tail 命令在 10 秒后仍然運(yùn)行,timeout 命令將在 20 秒后發(fā)送一個(gè) kill 信號(hào)并結(jié)束。
有關(guān)更多詳細(xì)信息,請(qǐng)查看手冊(cè)頁(yè)。
$ man timeout
有時(shí),某個(gè)特定程序可能需要很長(zhǎng)時(shí)間才能完成并最終凍結(jié)你的系統(tǒng)。在這種情況下,你可以使用此技巧在特定時(shí)間后自動(dòng)結(jié)束該進(jìn)程。
方法 2 - 使用 timelimit 程序
timelimit 使用提供的參數(shù)執(zhí)行給定的命令,并在給定的時(shí)間后使用給定的信號(hào)終止進(jìn)程。首先,它會(huì)發(fā)送警告信號(hào),然后在超時(shí)后發(fā)送 kill 信號(hào)。
與 timeout 不同,timelimit 有更多選項(xiàng)。你可以傳遞參數(shù)數(shù)量,如 killsig、warnsig、killtime、warntime 等。它存在于基于 Debian 的系統(tǒng)的默認(rèn)倉(cāng)庫(kù)中。所以,你可以使用命令來(lái)安裝它:
$ sudo apt-get install timelimit
對(duì)于基于 Arch 的系統(tǒng),它在 AUR 中存在。因此,你可以使用任何 AUR 助手進(jìn)行安裝,例如 Pacaur 、 Packer 、 Yay 、 Yaourt 等。
對(duì)于其他發(fā)行版,請(qǐng) 在這里 下載源碼并手動(dòng)安裝。安裝 timelimit 后,運(yùn)行下面的命令執(zhí)行一段特定的時(shí)間,例如 10 秒鐘:
$ timelimit -t10 tail -f /var/log/pacman.log
如果不帶任何參數(shù)運(yùn)行 timelimit,它將使用默認(rèn)值:warntime=3600 秒、warnsig=15 秒、killtime=120 秒、killsig=9。有關(guān)更多詳細(xì)信息,請(qǐng)參閱本指南最后給出的手冊(cè)頁(yè)和項(xiàng)目網(wǎng)站。
$ man timelimit
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- 解析Linux內(nèi)核的基本的模塊管理與時(shí)間管理操作
- 如何在 Linux 中查找一個(gè)命令或進(jìn)程的執(zhí)行時(shí)間
- Linux/CentOS系統(tǒng)同步網(wǎng)絡(luò)時(shí)間的2種方法詳解
- Linux中可以節(jié)省你時(shí)間的15個(gè)命令別名
- Linux date 時(shí)間設(shè)置同步命令分享
- 詳解linux ntp服務(wù)器時(shí)間同步設(shè)置
- Linux 按時(shí)間批量刪除文件命令(刪除N天前文件)
- Linux配置和使用i3窗口管理器的教程
- 使用iptable和Firewalld工具來(lái)管理Linux防火墻連接規(guī)則
- Linux中有效地管理進(jìn)程的8個(gè)命令
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的時(shí)間管理筆記整理
相關(guān)文章
ubuntu系統(tǒng)下matplotlib中文亂碼問題的解決方法
本篇文章主要介紹了ubuntu系統(tǒng)下matplotlib中文亂碼問題的解決方法,具有一定的參考價(jià)值,有興趣的可以了解一下2017-06-06Centos 64位安裝aapt、jdk、tomcat的詳細(xì)教程
這篇文章主要介紹了Centos 64位安裝aapt、jdk、tomcat的相關(guān)資料,需要的朋友可以參考下2016-11-11CentOS上搭建Nginx+Mono運(yùn)行asp.net環(huán)境的配置方法
這篇文章主要介紹了CentOS上搭建Nginx+Mono運(yùn)行asp.net環(huán)境的配置方法,需要的朋友可以參考下2017-03-03CentOS7 LNMP+phpmyadmin環(huán)境搭建 第二篇LNMP環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了CentOS7 LNMP+phpmyadmin環(huán)境搭建,第二篇LNMP環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07centos 6.9 升級(jí)glibc動(dòng)態(tài)庫(kù)的詳細(xì)過程
glibc是gnu發(fā)布的libc庫(kù),即c運(yùn)行庫(kù),glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運(yùn)行庫(kù)都會(huì)依賴于glibc。這篇文章主要介紹了centos 6.9 升級(jí)glibc動(dòng)態(tài)庫(kù)的詳細(xì)過程,需要的朋友可以參考下2019-11-11