Linuxコマンドに時間制限を設定する方法

Linuxサーバーの制御を担当するシステム管理者にとって、リソース管理は重要なタスクです。 Linuxコマンドは、システムリソースの膨大な量を消費し、停止する必要がある場合があります。

幸い、 timelimitなどのユーティリティを使用してコマンドの実行時間を制限できます。この記事では、コマンドに時間制限を追加する必要がある理由と、timelimitやtimeoutなどのコマンドを使用して時間制限を追加する方法について説明します。

コマンドの実行時間を制限するのはなぜですか?

時間制限付きでコマンドを実行しなければならない理由はいくつかあります。まず、古いコンピューターまたはサーバーを実行していて、システムが不要な処理でリソースを浪費したくない場合があります。

次に、ファイル転送などの時間制限のあるタスクは一定期間後に終了しますが、そのプロセスはすぐには停止しません。プログラムが追加のCPU時間とメモリを使用することを制限するために、転送が完了するとプロセスを停止する制限を追加できます。

timeoutコマンドを使用して制限を追加する

timeoutコマンドは、コマンドに時間制限を追加する多くのLinuxユーザーの最初の選択肢です。このツールはGNUCore Utilitiesパッケージの一部であるため、ほぼすべてのLinuxディストリビューションにプリインストールされています。

timeoutコマンドの基本的な構文は次のとおりです。

 timeout limit command

…ここで、 limitはコマンドを実行する時間の長さであり、 commandは時間制限付きで実行するLinuxコマンドです。

たとえば、 topコマンドを10秒間使用してプロセスの詳細を取得する場合は、次のようにします。

 timeout 10s top

一番上のコマンドは終わりがなく、 Ctrl + Cを使用して手動で終了する必要があります。前述のコマンドは10秒間topで実行され、タイマーがアップすると、timeoutはその実行を停止します。タイムアウトが1010Sが同じであることを意味デフォルトの時間単位として、秒を要していることに注意してください。

mh 、およびdをそれぞれ時間、および日に使用することもできます。

タイムアウトを使用して強制終了信号を手動で送信する

デフォルトでは、timeoutコマンドはSIGTERMをkillシグナルとして送信します。 SIGTERMは、信号がすぐにプロセスを終了する、終了の略です。

-sフラグを使用して、他のシグナルを送信することもできます。たとえば、SIGKILLシグナルを送信するには、次のようにします。

 timeout -s SIGKILL 10 top

信号番号で信号を指定することも可能です。次のコマンドは、SIGKILLシグナルをtopコマンドにも送信します。

 timeout -s 9 10 top

…ここで、 9はSIGKILLの信号番号です。

利用可能なすべての信号のリストを取得するには:

 kill -l

一部のコマンドは、制限時間を追加しても完全に停止しません。このような状況では、デフォルトのタイムアウトコマンドを使用してkillシグナルを追加すると、問題が修正されます。

 timeout -k 15 10 top

前述のコマンドは、最初にtopコマンドを10秒間実行し、コマンドが停止しない場合は、15秒後にプロセスにkillシグナルを送信します。

詳細: Linuxで応答しないプログラムを強制終了する方法

制限時間付きのコマンドランタイムの制限

timeoutコマンドとは異なり、timelimitはLinuxディストリビューションにプリインストールされている標準パッケージの1つではありません。したがって、システムにtimelimitを手動でインストールする必要があります。

Debianベースのディストリビューションにインストールするには:

 sudo apt install timelimit

Timelimitは公式のArchリポジトリでは利用できません。ただし、 yayのようなAURパッケージマネージャーを使用してインストールできます。

 sudo yay -S timelimit

関連: ArchLinuxにパッケージをインストールする方法

Fedoraにインストールするには:

 sudo dnf install timelimit

RHELとCentOSの場合:

 sudo yum install timelimit

または、それでもシステムにパッケージをインストールできない場合は、公式Webサイトからソースコードをダウンロードして手動でインストールしてください。

ダウンロード時間制限

timelimitを使用してtopコマンドを10秒間実行するには、次のようにします。

 timelimit -t10 top

TIMELIMITはwarntime、warnsig、killtime、およびkillsigのように複数の引数を取ります。ユーザーがこれらの引数を指定しない場合、デフォルト値が使用されます。これは、 warntime = 3600秒、 warnsig = 15killtime = 120 、およびkillsig = 9です。

Linuxでのコマンドの寿命の管理

Linuxマシンのリソースが限られている場合は、コマンドを監視してプロセスを制御することが重要になります。タイムアウトや時間制限などのユーティリティは、コマンドに時間制限を追加できるため、命の恩人です。

コマンドランタイムと同様に、システムの画面時間を制限することもできます。あなたがあなたの子供がコンピュータの前で不必要な時間を無駄にしたくない親であるならば、スクリーン時間を制限することは行くための最も適切な選択です。