Linux中國

如何在 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 有更多選項。你可以傳遞參數數量,如 killsigwarnsigkilltimewarntime 等。它存在於基於 Debian 的系統的默認倉庫中。所以,你可以使用命令來安裝它:

$ sudo apt-get install timelimit

對於基於 Arch 的系統,它在 AUR 中存在。因此,你可以使用任何 AUR 助手進行安裝,例如 PacaurPackerYayYaourt 等。

對於其他發行版,請在這裡下載源碼並手動安裝。安裝 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/

作者:SK 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國