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

LinuxでのCronを使用したシステムタスクのスケジューリング

cronは、指定された間隔でcronジョブを実行するスケジューリングデーモンです。 cronジョブは、システムメンテナンス、データベースまたはデータのバックアップ、システムアップデート、ディスクスペース使用量の確認、電子メールの送信などの反復または管理タスクを自動化します。

cronジョブを、分、時間、曜日、曜日、月、またはこれらの任意の組み合わせで実行するようにスケジュールできます。

なぜCronなのですか?

  • cronを使用すると、ジョブまたはタスクをいつ実行するかを制御できます。たとえば、実行の分、時間、日などを制御できます。
  • cronジョブは実行されていないときにメモリを占有しません。
  • タスクのループコードやロジックコードを作成する必要がなくなります。
  • 何らかの理由でジョブの実行に失敗した場合、次の時間間隔でジョブが再度実行されます。

cronデーモンをインストールして実行します

Linuxのcronユーティリティは、cronサービスを提供するcronieパッケージとともにインストールされます。

cronieパッケージがインストールされているかどうかを確認してください。

 [tuts @ fosslinux〜] $ rpm -q croniecronie-1.5.7-1.fc33.x86_64 

cronieパッケージが存在しない場合は、Fedoraユーザー向けに次のコマンドを使用してインストールしてください。

 [tuts @ fosslinux〜] $ sudo dnf install cronie 

タスクをスケジュールする前に、crond(cronデーモン)サービスを開始する必要があります。

crondサービスが実行されているかどうかを確認してください。

 [tuts @ fosslinux〜] $ systemctl status crond.service●crond.service-コマンドSchedulerLoaded:ロード済み(/usr/lib/systemd/system/crond.service;有効;ベンダーpre> アクティブ:アクティブ(実行中) 火2021-06-0809:14:40EAT; 2時間58分前メインPID:1671(crond)タスク:1(制限:3448)メモリ:14.4MCPU:316msCGroup:/system.slice/crond.service└─1671/ usr / sbin / crond -n 

コマンドが(アクティブ:アクティブ(実行中)を示している場合、サービスは実行中です。crondサービスが実行されていない場合は、次のコマンドを使用して現在のセッションでサービスを開始します。

 [tuts @ fosslinux〜] $ systemctl start crond.service 

次のコマンドを使用して、起動時に自動的に開始および実行されるようにサービスを構成することもできます。

 [tuts @ fosslinux〜] $ systemctl enable crond.service 

stopコマンドを使用してcrondサービスの実行を停止できます。

 [tuts @ fosslinux〜] $ systemctl stop crond.service 

再起動コマンドを使用して再起動することもできます:

 [tuts @ fosslinux〜] $ systemctl restart crond.service 

cronジョブを定義する

cronジョブがどのように機能するかを理解するために、cronジョブの例とcrontab構成ファイルを構成する部分を見ていきます。
例:gitマスターブランチの最新の変更をプルするcronジョブ。

 * / 55 * * * * username cd / home / username / project / shop_app &&git pull origin master 

上記のcronジョブは、次の2つの主要部分で構成されています。

  1. 最初の部分(* / 55 * * * *)は、55分ごとに実行するようにタイマーを設定します。
  2. cronジョブ構成の2番目の部分では、コマンドラインから実行されるステートメントを定義します。コマンドはユーザー(username)として実行され、ディレクトリを(/ home / username / project / shop_app)に変更します。最後の部分では、gitコマンドを実行して、プロジェクトのマスターブランチの最新の変更をプルします。

crontabを使用してcronジョブを作成する

目安として、cronファイルを直接編集することは想定されていません。代わりに、crontabコマンドを使用して、システムで実行されているcronジョブを作成、編集、インストール、アンインストール、または一覧表示します。 cronジョブを定義すると、それらはバックグラウンドで実行され、デーモンは/ etc / crontabファイル、/ etc /cron。*/、および/ var / spool /cron/ディレクトリで新しいcronジョブを常にチェックします。

FedoraなどのRedHatベースのディストリビューションはcrontabファイルを/var/ spool / cronディレクトリに保存し、DebianおよびUbuntuディストリビューションは/ var / spool / cron/crontabsディレクトリに保存します。システム全体のcrontabファイルとスクリプトは、それぞれetc/crontabファイルと/etc/cron.dディレクトリに保存されます。

新しい構成ファイルを作成した後、または既存の構成ファイルを編集した後は、cronを再起動する必要がないことに注意してください。

crontab時間の構文と演算子

cronジョブ定義の最初の部分は、タイミング情報です。 cronジョブがいつどのくらいの頻度で実行されるかを決定します。分、時、日、月、曜日の順で構成されます。カンマまたはハイフンで区切って1つ以上の値を指定できます。

 .----------------分(0-59)| .-------------時間(0-23)| | .----------月の日(1〜31)| | | .-------月(1〜12)またはjan、feb、mar、apr…| | | | .----曜日(0-6)(Sunday =0または7)またはsun、mon、tue、wed、thr、fri、sat | | | | | | | | | | * * ***実行するusernamecronjobコマンド
  • * –実行時間を定義するときに、値の代わりにアスタリスクを使用して、その位置で可能なすべての値を表すことができます。たとえば、分の位置にアスタリスクを使用すると、cronジョブは1分ごとに実行されます。
  • –コンマは、繰り返しの値のリストを指定します。たとえば、[時間]フィールドに2、3、6を指定すると、cronジョブは午前2時、午前3時、および午前6時に実行されます。
  • – –ハイフンは値の範囲を指定します。たとえば、曜日フィールドに2〜6がある場合、cronジョブは火曜日から土曜日まで毎週実行されます。
  • / –スラッシュ演算子は、特定の間隔で繰り返される値を指定します。たとえば、時間フィールドの* / 6は、cronジョブが6時間ごとに実行されることを示します。これは、0、6、12、18を指定するのと似ています。

事前定義されたマクロ

Cronには、一般的な間隔を指定するために使用できるいくつかの特別なスケジュールマクロがあります。日付と時刻の指定の代わりに使用できます。

  • @reboot –指定されたタスクはシステムの起動時に実行されます。
  • @yearlyまたは@annually–指定されたタスクは、1月1日の深夜に年に1回実行されます。 0 0 11*に似ています。
  • @monthly –タスクは月に1回、月の初日の深夜に実行されます。 0 0 1**に似ています。
  • @weekly-指定されたタスクは、週に1回、日曜日の深夜に実行されます。 0 0 **0と同等です。
  • @daily –指定されたタスクは1日1回深夜に実行されます。 0 0 ***と同等です。
  • @hourly –タスクは1時間の初めに1時間に1回実行されます。 0 * ***に似ています。

Crontabコマンド

crontabコマンドを使用すると、crontabファイルをインストール、開く、または表示できます。

次のコマンドを使用して、crontabファイルを作成するか、既存のファイルを開きます。

 $ crontab -e 

このコマンドはデフォルトでviエディターを開き、システムで実行するcronジョブを定義できるようにします。

システム内のすべてのcronジョブを一覧表示し、crontabファイルの内容を表示します:

 $ crontab -l <​​/ pre> 

-uオプションを使用して、特定のユーザーのcronジョブを一覧表示します。

 $ crontab -u username -l <​​/ pre> 

-rコマンドを使用してすべてのcronジョブを削除します:

 $ crontab -r 

rootユーザーとして-r-uコマンドを使用して、特定のユーザーのcronジョブを削除します。

 $ crontab -r -u username 

削除する前に、プロンプトを表示して現在のcrontabファイルを削除します。

 $ crontab -i 

crontab変数

  • PATH =/ usr / bin:/binがデフォルトのcrontabパスです。ただし、実行しているコマンドへのパスを定義したり、cron$PATH変数を変更したりできます。
  • bin/shがデフォルトのシェルです。
  • MAILTO環境は、電子メール通知を送信するcrontabの所有者を定義します。電子メール通知を受信するために、すべての電子メールアドレスのコンマ区切りリストを変数に追加できます。 MAILTO変数が空の場合(つまり、MAILTO =”“)、メールは送信されないことに注意してください。

cronジョブの例

次のcronジョブが毎分実行されます:

 * * * **[cronジョブコマンド]

次のcronジョブは、1時間に6回、つまり10分ごとに実行されます。

 * / 10 * * **[cronジョブコマンド]

30分ごとにスクリプトを実行し、出力を「/ home / tuts / Documents」にリダイレクトします:

 MAILTO [email protected] * / 30 * * * * /path/to/homescript.sh> / home / username / Documents 

&&演算子を使用して、毎週金曜日の午前8時に2つのコマンドを実行します。

 0 8 * * Fri commandA &&commandB 

月に1回、月の5日目の午前2:00にコマンドを実行します:
(つまり、3月5日午前2:00、4月5日午前2:00、12月5日午前2:00、e.t.c):

 0 2 5 **[cronジョブコマンド]

毎月3日と23日の午前10時30分にスクリプトを実行します。

 30 10 3,23 * * /path/to/fosslinuxscript.sh 

次のコマンドを使用して、カスタムHOME、PATH、SHELL、およびMAILTO変数を設定し、1分ごとにコマンドを実行します。

 HOME =/ optPATH =/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/binSHELL=/usr/bin/[email protected] * / 1 * * **[cronジョブコマンド]

スケジュールのヒント

cronジョブをスケジュールするタスクは、ジョブの数が増えるにつれて困難で困難な場合があります。特に実稼働環境で同時に実行されるcronジョブは、深刻なパフォーマンスの問題を引き起こす可能性があります。たとえば、同時に実行されるシステムのバックアップとコンパイルは多くのシステムリソースを消費し、システムのRAMが不足する可能性があります。このような課題を回避する1つの方法は、リソースを大量に消費するタスクを1日、1週間、または1か月のさまざまな時間にスケジュールすることです。また、システムにメモリを追加したり、大量のメモリを使用する不適切に記述されたタスクを削除したりすることもできます。

cronジョブの実行がスケジュールされている期間中にコンピュータの電源がオフになると、別の問題が発生します。その結果、cronジョブは、次に実行がスケジュールされるまで実行されません。これは、特にcronジョブがシステムにとって重要である場合に、問題を引き起こす可能性があります。幸い、Linuxにはanacronプログラムが用意されており、ユーザーはcronジョブを定期的にスケジュールすることができます。 anacronのmanページから詳細をご覧ください。

cronアクセスの制限

Cronは、どの通常のシステムユーザーがcrontabコマンドにアクセスできるかを制御する方法を提供します。これは、メモリなどのシステムリソースがいっぱいになる可能性のあるミスを制限するのに役立ちます。誤用を防ぐために、/ etc/cron.denyファイルと/etc/cron.allowファイルを使用してユーザーアクセスを制御してください。いずれかのファイルにユーザー名を追加して、アクセスを拒否または許可できます。

root以外のユーザーによるcronジョブとcrontabコマンドへのアクセスを制限することが重要です。

結論

Cronは主にシステム管理者向けのツールですが、多くのユーザータスクにも関連しています。たとえば、cronを使用して、バックアップやWebアプリケーションなどの退屈なタスクをスケジュールします。

cron、crontab、およびanacronのマニュアルページは、情報とヒントが役立ち、有益であると思います。


Linux
  1. cronを使用してタスクをスケジュールするためのLinuxのヒント

  2. procps-ngを使用してターミナルでLinuxシステムを監視します

  3. noatimeでLinuxシステムのパフォーマンスを向上させる

  1. Linuxcronコマンドを使用したタスクのスケジューリング

  2. straceを使用したLinuxでのシステムコールの理解

  3. Linuxシャットダウンコマンド(例付き)

  1. VirtualBoxを搭載したオペレーティングシステムでLinuxをお試しください

  2. Linuxセキュリティツールを使用した侵入テスト

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