Linux で特定の時間にコマンドを実行する方法

Linux で特定の時間にコマンドを実行する方法

先日、rsync を使用して LAN 上の別のシステムに大きなファイルを転送していました。非常に大きなファイルなので、完了するまでに約 20 分かかります。もうこれ以上待ちたくないし、プロセスを終了させるために CTRL+C を押したくもありません。 Linux OS でコマンドを特定の時間実行し、タイムアウトしたら自動的に終了させる簡単な方法があるかどうかを知りたかったので、この投稿をしました。引き続きお読みください。

Linuxで特定の時間にコマンドを実行する

これには 2 つの方法があります。

方法1 – タイムアウトコマンドを使用する

最も一般的な方法は、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

この場合、10 秒後に tail コマンドがまだ実行されている場合、timeout コマンドは 20 秒後に kill 信号を送信して終了します。

詳細については、man ページを参照してください。

$ man timeout

場合によっては、特定のプログラムの完了に長い時間がかかり、システムがフリーズしてしまうことがあります。この場合、このトリックを使用すると、一定時間後にプロセスを自動的に終了できます。

方法2 - 時間制限プログラムを使用する

timelimit 指定された引数を使用して指定されたコマンドを実行し、指定された時間後に指定されたシグナルでプロセスを終了します。まず警告信号を送信し、タイムアウト後に kill 信号を送信します。

タイムアウトとは異なり、timelimit にはよ​​り多くのオプションがあります。 killsig、warnsig、killtime、warntime などの複数の引数を渡すことができます。これは、Debian ベースのシステムのデフォルトのリポジトリで利用できます。したがって、次のコマンドを使用してインストールできます。

$ sudo apt-get install timelimit

Arch ベースのシステムの場合は、AUR で利用できます。したがって、Pacaur、Packer、Yay、Yaourt などの AUR ヘルパーを使用してインストールできます。

その他のディストリビューションの場合は、ここからソースをダウンロードして手動でインストールしてください。 timelimit をインストールした後、次のコマンドを実行して、特定の期間 (たとえば 10 秒) 実行します。

$ timelimit -t10 tail -f /var/log/pacman.log

引数なしで timelimit を実行すると、デフォルト値が使用されます: warntime=3600 秒、warnsig=15 秒、killtime=120 秒、killsig=9。詳細については、このガイドの最後に記載されているマニュアル ページとプロジェクトの Web サイトを参照してください。

$ man timelimit

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linuxカーネルの基本的なモジュール管理と時間管理操作を分析する
  • Linux でコマンドまたはプロセスの実行時間を調べる方法
  • Linux/CentOS システムでネットワーク時間を同期する 2 つの方法の詳細な説明
  • 時間を節約できる Linux コマンド エイリアス 15 個
  • Linux 日付時刻設定同期コマンド共有
  • Linux NTPサーバーの時刻同期設定の詳細な説明
  • Linux のバッチファイル削除コマンド (N 日前のファイルを削除)
  • Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル
  • iptables および firewalld ツールを使用して Linux ファイアウォール接続ルールを管理する
  • Linux でプロセスを効果的に管理するための 8 つのコマンド
  • Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項

<<:  JavaScriptはマウスの動きに追従するボックスを実装します

>>:  JavaScript が重複したネットワークリクエストを防ぐ方法の例

推薦する

iOS WeChat H5ページのゴム反発効果の落とし穴記録

ビジネス要件最近開発したプロジェクトの一つに、WeChat公式アカウントに関連したH5ページがありま...

Docker は固定コンテナ IP アドレスを実現するためにカスタム ネットワークを作成します。

デフォルトのブリッジ ネットワークのため、コンテナーを再起動すると IP アドレスが変更されます。シ...

Vue でスクロールバーのスタイルを変更する方法

目次まず、スクロール バーのスタイルを変更するには、疑似要素-webkit-scrollbarを使用...

MySQL が大規模トランザクションを避けるべき理由とその解決方法

何が大問題ですか?長時間実行され、長時間コミットされないトランザクションは、大規模トランザクションと...

MySQL 8.0.15 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15 winx64解凍版のインストールと設定方法を紹介します。具体...

Dockerを使用して分散lnmpイメージを作成する

目次1. Docker分散lnmpイメージ生成1. Nginx、MySQL、PHPコンテナを実行する...

Nginx+Tomcat 負荷分散クラスタの実装例

目次導入1. 事例の概要2. 環境の展開3. Nginxホストのインストール4. Tomcatのイン...

ARMアーキテクチャにおける関数呼び出しプロセスの簡単な分析

目次1. 背景知識1. ARM64レジスタの紹介2. STP命令の詳しい説明(ARMV8マニュアル)...

docker を使用して Kong クラスター操作を構築する

docker コンテナの下に kong クラスターを構築するのは非常に簡単です。公式サイトの紹介も非...

LinuxにKafkaをインストールする

目次1.1 前提条件としてのJava環境1.2 Zookeeperのインストールと設定1.3 Kaf...

MySQL での mysqladmin 日常管理コマンドの概要 (必読)

mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...

Dockerはredis 5.0.7をインストールし、外部構成とデータの問題をマウントします

Redis は、ANSI C で記述されたオープンソースの NoSQL データベースであり、ネットワ...

Windows Server 2008R2、2012、2016、2019 の違い

目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...

CentOS 7 で yum を使用して MySQL 5.7.20 をインストールする最も簡単な方法

CentOS7 のデフォルトのデータベースは mariadb ですが、mysql を使っている人も多...

Linux システム修復モード (シングル ユーザー モード)

目次序文1. シングルユーザーモードでの一般的なバグ修正2. シングルユーザーモードでシステムパスワ...