GNU/Linux >> Linux の 問題 >  >> Linux

Linux上のCronジョブとCrontabの説明

このチュートリアルは、Linuxでのcronとcrontabファイルの役割を理解するための完全なガイドです。

システム管理者は、システムで定期的なタスクを実行することに多くの時間を費やす可能性が非常に高くなります。 。

幸いなことに、Linuxシステムでタスクを自動化する方法があります:cronジョブ

1975年にAT&T Bell Laboratoriesによって最初に構築されたcronは、決まった日付または期間でのタスクのスケジューリングと実行に関して、Linuxのリファレンスになるように進化しました。

今日のチュートリアルでは、cronデーモンを見ていきます。 、cronジョブとcrontabコマンド Linuxの場合。

また、ユーザー定義のcronジョブとシステム定義のcronジョブの違いについても説明します。

準備はいいですか?

CronおよびCronJobsとは何ですか?

cronは、任意のLinuxシステムで実行されるシステムデーモンであり、cronジョブを検出し、指定された間隔で実行します。

Cronは毎分実行され、ファイルシステム上の事前定義されたディレクトリのセットを検査して、ジョブを実行する必要があるかどうかを確認します。

一方、cronジョブは、特定の間隔または期間で実行するように定義されたタスクであり、通常はシェルスクリプトまたは単純なbashコマンドです。

cronジョブは通常、特定のイベントをSyslogユーティリティに記録するため、またはホストでのバックアップ操作(データベースバックアップやファイルシステムバックアップなど)をスケジュールするために使用されます。

systemdをサービスマネージャーとして実行しているLinuxOSの場合、次のコマンドを実行してcronサービスを検査できます

$ sudo systemctl status cron.service

:systemdでシステムサービスを検査するにはsudo権限が必要です

Cronジョブ構文とは何ですか?

cronについて知っておくべき最も重要なことは、おそらくcronジョブの構文です。

cronジョブを定義するには、次のように定義します:

  • 周期性 :あなたの仕事が時間の経過とともに実行されることを意味します。月の最初の日ごと、5分ごと、または1年の特定の日に実行するように定義できます。例については、この記事の後半で説明します。
  • コマンド :文字通り、cronユーティリティによって実行されるコマンドです。バックアップコマンドでも、通常はシェルで実行するコマンドでもかまいません。
  • ユーザー :これは、cronコマンドを実行する必要があるユーザーを指定するシステム定義のcronジョブ用に予約されています。ユーザー定義のcronジョブの場合、ユーザーを指定する必要はありません。システムはデフォルトでそれらをrootとして実行します。

お気づきかもしれませんが、周期性の列は5列で構成されています。

すべての列を*に設定できます 、コマンドは、指定された間隔のすべての値に対して、または特定の値(たとえば、年の6か月目)に対して実行されることを意味します。

毎分、毎時、毎日、毎月のコマンドを実行する場合 、次のコマンドを正しく実行します

* * * * *  logger "This is a command executed every minute"

30分ごとにコマンドを実行する場合 、あなたは書くでしょう

*/30 * * * * logger "This is executed every 30 minutes"

一方、月の初日の深夜にコマンドを実行したい場合 、あなたは書くでしょう

0 0 1 * * logger "This is executed on the first day of the month, at midnight"

これらのcronジョブを定義するときに、それらを実行するユーザーを指定する必要はありませんでした。

これは、ユーザー定義のcronジョブとシステム定義のcronジョブに違いがあるためです。

ユーザー定義のcronジョブ

ユーザー定義のcronジョブは、ホスト上の特定のユーザーによって定義されたcronジョブです。システム全体に影響を与えるコマンドを実行できないという意味ではありませんが、そのタスクはホスト上の特定のフォルダに分離されています。

すべてのユーザーは、Linuxホスト上で独自のcronジョブのセットを持つことができます。

ユーザー定義のcronジョブの一覧表示

特定のユーザーに接続したら、このコマンドを実行して、ユーザーが所有するcronジョブを確認します

$ crontab -l

cronジョブを所有している場合、それらはすぐに標準出力に表示されます。

デフォルトでは、ユーザー定義のcronジョブは/ var / spool / cron / crontabsディレクトリに保存されますが、探索するにはrootである必要があります。

ユーザー定義のcronジョブの追加

接続しているユーザーに関連するcronジョブを編集するには、次のコマンドを実行します

$ crontab -e

デフォルトでは、ホストはデフォルトのエディターを開き、システムでcronジョブを実行できるようになります。

たとえば、ファイルの最後に次の行を含む新しい行を追加します

* * * * * logger "This is a log command from devconnected"

Loggerは、ユーザーがカスタムメッセージをログに書き込むことができるコマンドです。ロギングとSyslogに関する完全なガイドが必要な場合は、完全な記事を用意しています。

システムはこのコマンドを定義しているユーザーをすでに認識しているため、ユーザーを指定する必要はありません。

さらに、コマンドは現在のユーザーとして実行されます デフォルトで。

サービスを再開する必要はありません。次回の発生時にジョブが考慮されます。

前に指定した例を前提として、ログを調べてcronジョブが実行されたことを確認します

$ sudo journalctl -xfn

ご覧のとおり、cronサービスはホスト上のユーザー固有のディレクトリを検査しました / var / spool / cron / crontabs )、現在のユーザーとしてセッションを開き、コマンドを実行してセッションを閉じました。

素晴らしい!

ホストでユーザー定義のcronジョブを定義する方法を学びました。

ユーザー定義のcronジョブの削除

ユーザー定義のcronジョブを削除するには、次のコマンドを使用します

$ crontab -r
(or)
$ crontab -ri

現在のユーザーのcrontabは削除されます(システム定義のcronジョブは削除されません)。

cronジョブリストを実行して、すべてのcronジョブが削除されたことを確認します

システム定義のcronジョブ

システム定義のcronジョブは、ファイルシステム上の共有ディレクトリで定義されたジョブです。

これは、ホストでsudo権限を持っている場合、システム上の他の管理者によって変更される可能性のあるcronジョブを定義できることを意味します。

システム定義のcronジョブに関連するディレクトリは、etcディレクトリにあり、実行すると表示されます

$ ls -l | grep cron

ご覧のとおり、このフォルダにはさまざまなフォルダとファイルが含まれています:

  • anacrontab :Linux上のanacronサービスで使用されるファイル。これについては、次のセクションのいずれかで説明します。
  • cron.d :cronサービスによって読み取られるcronジョブのリストを含むディレクトリ。 cron.dのファイルは、前に見たcron構文を使用して記述されています。
  • cron.daily :システムによって毎日実行されるスクリプトのリストを含むディレクトリ。ファイルは実際のbashスクリプトであり、cron構文で記述されたcronジョブではないため、cron.dディレクトリに含まれるファイルとは異なります。
  • cron.hourly、cron.monthly、cron.weekly 自明であり、1時間ごと、毎月、1年の毎週実行されるスクリプトが含まれています。
  • crontab :毎日、毎時、毎月、毎週のフォルダにあるジョブを実行するようにcronサービスに指示するcron構文で記述されたcronファイル。コマンドを実行するユーザーを指定する必要があることを除いて、ユーザー定義のcronジョブと同様にカスタムジョブを定義することもできます。

システム定義のcronジョブの一覧表示

ご存知かもしれませんが、グローバル構成フォルダーで定義されたcronジョブは、複数のフォルダーに分散しています。

さらに、これらのフォルダに複数のcronファイルを定義できます。

ただし、コマンドラインを使用すると、特定のディレクトリ内のすべてのファイルを連結する効率的な方法があります。

cron.dで定義されているすべてのcronジョブを一覧表示するには、次のコマンドを実行します

$ cat /etc/cron.d/*

同様に、crontabファイルで定義されているcronジョブを一覧表示するには、次のコマンドを実行します

$ cat /etc/crontab

同様に、毎日実行されるすべてのスクリプトを検査できます

ls -l /etc/cron.daily/

システム定義のcronジョブの追加

ご存知かもしれませんが、システム定義のcronジョブを追加する方法は複数あります。

cron.dにcronファイルを作成すると、ファイルの変更が1分ごとに検査されます。

cronジョブをcrontabファイルに直接追加することもできます。 1分ごとまたは1時間ごとにタスクを実行する場合は、スクリプトを追加することをお勧めします。 対応するcronディレクトリに直接移動します。

ユーザー定義のcronジョブとの唯一の違いは、cronコマンドを実行するユーザーを指定する必要があることです。

たとえば、cron.dディレクトリに新しいファイルを作成し、それに次のコンテンツを追加します(コマンドを実行するには、明らかにsudo権限が必要です)

$ sudo nano /etc/cron.d/custom-cron

*/1 * * * *    root    logger 'This is a cron from cron.d'

繰り返しになりますが、サービスを再起動する必要はありません。cronサービスは、次の反復でファイルを検査します。

cronジョブの動作を確認するには、次のコマンドを実行します

$ sudo journalctl -xfn 100 | grep logger

これが画面に表示されるはずです

すばらしい!

ご覧のとおり、ジョブはホスト上のrootユーザーによって毎分実行されます。

ユーザー定義のcronジョブとシステム定義のcronジョブについて完全に理解できたので、Linuxホストでの完全なcronライフサイクルを見てみましょう。

Linuxでのcron完全サイクル

面倒なことはありませんが、これがLinuxでの完全なcronサイクルです。

これは、cronサービスが毎分実行することであり、検査されるすべてのディレクトリも同様です。

cronはユーザー定義のcronジョブを検査します 必要に応じて実行します。

また、 crontabも検査します いくつかのデフォルトのcronジョブがデフォルトで定義されているファイル。

これらのデフォルトのcronジョブは、ホストに毎分、毎時、毎日、毎週特定のフォルダを確認し、その中にあるスクリプトを実行するように指示するスクリプトです。

最後に、cron.dディレクトリが検査されます 。 cron.dにはカスタムcronファイルが含まれている場合があり、anacroncronファイルである非常に重要なファイルも含まれています。

Linux上のAnacroncronファイル

anacron cronファイルは、午前7時から午後11時まで30分ごとに実行されるファイルです。

anacron cronファイルは、anacronサービスを呼び出す役割を果たします。 。

anacronサービスは、コンピューターでcronジョブを実行できなかった場合に、cronジョブの実行を担当するサービスです。

コンピューターの電源がオフになっているが、毎週更新スクリプトを実行するcronジョブがあるとします。

その結果、コンピューターの電源を入れると、これらの更新スクリプトの実行を1週間待つのではなく、anacronサービスは以前に更新cronを起動できなかったことを検出します。

その後、Anacronは、システムを更新するためのcronジョブの実行に進みます。

デフォルトでは、anacron cronファイルは、cron.daily、cron.weekly、cron.hourly、およびcron.monthlyディレクトリが過去に正しく呼び出されたことを確認するように指示されています。

cron.monthlyフォルダー内のcronジョブが実行されていないことをanacronが検出した場合、それらを実行するのはanacronが担当します。

結論

今日は、Linuxでcronとcrontabがどのように機能するかを学びました。

また、cron構文と、ホスト上のユーザーとして独自のcronスクリプトを定義する方法についても完全に紹介しました。

最後に、ホスト上での動作とanacronとは何かについての完全なcronサイクルの概要がわかりました。

Linuxシステム管理に興味がある場合は、当社のWebサイトに完全なセクションがあります。下の画像をクリックしてチェックしてください。


Linux
  1. Linuxでcronを使用する方法

  2. Linuxコマンド:jobs、bg、およびfg

  3. Crontabを使用してcronジョブをスケジュールする方法

  1. Crontabを使用してLinuxでタスクを自動化する方法

  2. Crontabを使用したcronジョブのスケジューリング

  3. Linux:フォアグラウンドで cron ジョブを実行する

  1. Linuxでcronジョブを一覧表示する方法

  2. LinuxでCRONジョブをスケジュールおよび一覧表示するさまざまな方法

  3. Crontabとは何ですか?Crontabを使用してLinuxでタスクを自動化する方法