如何在 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 中國: https://github.com/Linux-CN/archive