ホームページ  >  記事  >  システムチュートリアル  >  Linux でのタスク スケジューリングは 2 種類のユーザー crontab サービスに分かれています

Linux でのタスク スケジューリングは 2 種類のユーザー crontab サービスに分かれています

WBOY
WBOY転載
2024-03-11 08:00:231211ブラウズ

最初にコマンドを発行します:

###1。コマンド形式:

crontab[-user]ファイル

crontab[-user][-e|-l|-r]

###2。コマンド機能:

crontab コマンドを使用すると、指定されたシステム命令またはシェルスクリプト スクリプトを一定の間隔で実行できます。時間間隔の単位は、分、時間、日、月、週、または上記の任意の組み合わせにすることができます。このコマンドは、定期的なログ分析やデータのバックアップに特に適しています。

####3.コマンドパラメータ:

-user: 特定のユーザーの crontab サービスを設定するために使用されます。たとえば、「-uixdba」は、ixdba ユーザーの crontab サービスを設定することを意味します。このパラメータは通常、root ユーザーによって実行されます。

file: file はコマンド ファイルの名前です。これは、そのファイルが crontab のタスク リスト ファイルとして使用され、crontab にロードされることを意味します。このファイルがコマンド ラインで指定されていない場合、crontab コマンドは標準入力 (マウス) に入力されたコマンドを受け入れ、それらを crontab にロードします。

-e: ユーザーの crontab ファイルの内容を編集します。ユーザーが指定されていない場合は、現在のユーザーの crontab ファイルを編集することを意味します。

-l: 特定のユーザーの crontab ファイルの内容を表示します。ユーザーが指定されていない場合は、現在のユーザーの crontab ファイルの内容を表示することを意味します。

-r: /var/spool/cron ディレクトリからユーザーの crontab ファイルを削除します。ユーザーが指定されていない場合は、デフォルトで現在のユーザーの crontab ファイルが削除されます。

-i: ユーザーの crontab ファイルを削除するときに確認プロンプトを表示します。

詳細:

1. crond の概要

crond は、Linux で特定のタスクを定期的に実行したり、個々のインシデントの処理を待機したりするために使用されるデーモン プロセスです。Windows でのスケジュールされたタスクに似ています。オペレーティング システムがインストールされると、このサービス ツールはデフォルトでインストールされます。 crond プロセスを手動で起動します。crond プロセスは、実行すべきタスクがあるかどうかを 1 分ごとに定期的に検出し、実行すべきタスクがある場合は、手動でタスクを実行します。

Linux でのタスク スケジューリングは、システム タスク スケジューリングとユーザー タスク スケジューリングの 2 つのカテゴリに分類されます。

システム タスク スケジューリング: キャッシュされたデータのハードディスクへの書き込み、ログのクリアなど、システムが定期的に実行する作業。 /etc ディレクトリには、システム タスク スケジューリングの構成ファイルである crontab ファイルがあります。

/etc/crontab ファイルには次の行が含まれます:

[root@localhost~]#cat/etc/crontab

シェル=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""ホーム=/

#ランパーツ

51****rootrun-parts/etc/cron.hourly

247***rootrun-parts/etc/cron.daily

224**0rootrun-parts/etc/cron.weekly

4241**rootrun-parts/etc/cron.monthly

[root@localhost~]

#最初の 4 行は、crond タスクを実行するための環境変数を構成するために使用されます。最初の行の SHELL 変数は、システムが使用するシェルを指定します。ここでは bash です。2 行目の PATH 変数は、次のパスを指定します。コマンドを実行するシステム 3 行目 MAILTO 変数は、crond のタスク実行情報がメールで root ユーザーに送信されることを指定します MAILTO 変数の値が空の場合は、タスク実行情報が送信されないことを意味します4 行目の HOME 変数は、コマンドまたはスクリプトが実行されることを指定します。使用されるホーム ディレクトリです。 6 行目から 9 行目で表現される意味については、次のセクションで詳しく説明します。ここで言うことはあまりありません。

ユーザー タスクのスケジュール: ユーザー データのバックアップ、定期的な電子メール リマインダーなど、ユーザーが定期的に実行する必要があるタスク。ユーザーは crontab ツールを使用して、スケジュールされたタスクを独自にカスタマイズできます。ユーザー定義の crontab ファイルはすべて /var/spool/cron ディレクトリに保存されます。ファイル名はユーザー名と一致します。

ユーザー権限ファイル:

###書類:###

/etc/cron.deny

イラスト:

このファイルにリストされているユーザーは crontab コマンドを使用できません

###書類:###

/etc/cron.allow

イラスト:

このファイルにリストされているユーザーは、crontab コマンドの使用を許可されています

###書類:###

/var/スプール/cron/

イラスト:

すべてのユーザーの crontab ファイルが保存されるディレクトリ。ユーザー名に基づいて名前が付けられます。

crontab ファイルの意味:

ユーザーが作成した crontab ファイルでは、各行がタスクを表し、各行の各配列が設定を表します。その形式は 6 つの配列に分割されています。最初の 5 つのセグメントは時間設定セグメントです。6 番目のセグメントは実行するコマンドセグメント。形式は次のとおりです:

分時日月週コマンド

###で:###

min: 分を表し、0 ~ 59 の任意の整数を指定できます。

hour: 時間を表し、0 ~ 23 の任意の整数を指定できます。

day: 日付を表し、1 ~ 31 の任意の整数を指定できます。

month: 月を示します。1 ~ 12 の任意の整数を指定できます。

week: 曜日を示します。0 ~ 7 の任意の整数を指定できます。0 または 7 は日曜日を表します。

command: 実行するコマンドは、システムコマンドまたは自分でコンパイルしたスクリプトファイルです。

上記の各配列では、次の特殊文字も使用できます:

アスタリスク (*): すべての可能な値を表します。たとえば、月の配列がアスタリスクの場合、他の配列の障害条件が満たされた後、コマンド操作が毎月実行されることを意味します。

コロン (,): コロンで区切られた値を使用してリスト範囲を指定できます (例: "1,2,5,7,8,9"

)

Zhong bar (-): 整数間の中央のバーを使用して整数の範囲を表すことができますLinux スケジュールされたタスクは実行されません (例: "2-6" は "2,3,4, 5,6”

スラッシュ (/): スラッシュを使用して時間間隔の頻度を指定できます。たとえば、「0-23/2」は 2 時間ごとの実行を意味します。同時に、*/10 のようにスラッシュをアスタリスクと一緒に使用することもできます。分の配列で使用すると、10 分ごとに実行されることになります。

2.crond サービス

crontabをインストールします:

yuminstallcrontabs

サービス操作手順:

/sbin/servicecrondstart//サービスの開始

/sbin/servicecrondstop//サービスをオフにする

/sbin/servicecrondrestart//サービスを再起動

/sbin/servicecrondreload//設定をリロード

crontab サービスのステータスを表示:

サービスクロンステータス

linux任务计划不生效_linux任务计划执行脚本_linux 计划任务没执行

crontab サービスを自動的に開始します:

サービスクロンスタート

crontab サービスが起動時に開始するように設定されているかどうかを確認し、次のコマンドを実行します。

ntsysv

起動時に手動起動を追加:

chkconfig–level35crondon

3. crontab コマンドの解釈

###1。コマンド形式:

crontab[-user]ファイル

crontab[-user][-e|-l|-r]

###2。コマンド機能:

crontab コマンドを使用すると、指定されたシステム命令またはシェルスクリプト スクリプトを一定の間隔で実行できます。時間間隔の単位は、分、時間、日、月、週、または上記の任意の組み合わせにすることができます。このコマンドは、定期的なログ分析やデータのバックアップに特に適しています。

####3.コマンドパラメータ:

-user: 特定のユーザーの crontab サービスを設定するために使用されます。たとえば、「-uixdba」は、ixdba ユーザーの crontab サービスを設定することを意味します。このパラメータは通常、root ユーザーによって実行されます。

file: file はコマンド ファイルの名前です。これは、そのファイルが crontab のタスク リスト ファイルとして使用され、crontab にロードされることを意味します。このファイルがコマンド ラインで指定されていない場合、crontab コマンドは標準入力 (マウス) に入力されたコマンドを受け入れ、それらを crontab にロードします。

-e: ユーザーの crontab ファイルの内容を編集します。ユーザーを指定しない場合は、現在のユーザーの crontab ファイルを編集することを意味します。

-l: 特定のユーザーの crontab ファイルの内容を表示します。ユーザーが指定されていない場合は、現在のユーザーの crontab ファイルの内容を表示することを意味します。

-r: /var/spool/cron ディレクトリからユーザーの crontab ファイルを削除します。ユーザーが指定されていない場合は、デフォルトで現在のユーザーの crontab ファイルが削除されます。

-i: ユーザーの crontab ファイルを削除するときに確認プロンプトを表示します。

###4。一般的に使用される方法:

1).新しい crontab ファイルを作成します

crontab ファイルを cron プロセスに送信することを検討する前に、まず環境変数 EDITOR を設定する必要があります。 cron プロセスは、これを使用して、crontab ファイルの編集に使用するエディタを決定します。 UNIX および LINUX ユーザーの 99% が vi を使用しています。同じことを行う場合は、$HOME ディレクトリの .profile ファイルを編集して、

linux スケジュールされたタスクは実行されません、次の行を追加します:

EDITOR=vi;exportEDITOR

その後、保存して終了します。 cron という名前のファイルを作成することもできます。 ここで、 はユーザー名です (例: davecron)。このファイルに次の内容を追加します。

#(ここに自分のイニシャルを入れてください)

ごとに日付をコンソールにエコーします

#午後6時から午前6時までの15分

0,15,30,4518-06***/bin/echo'date'>/dev/console

###保存して終了。次の 5 つのフィールドがスペースで区切られていることを確認してください。

前の例では、システムは 15 分ごとに現在の時刻をコンソールに出力します。システムがクラッシュまたはハングした場合、最後に表示された時刻からいつシステムが動作を停止したかが一目でわかります。一部のシステムでは、tty1 がコンソールを表すために使用され、内部の例は実際の状況に応じて変更できます。作成したばかりの crontab ファイルを送信するには、この新しく作成したファイルを cron コマンドのパラメータとして使用できます:

$クロンタブダベクロン

これでファイルは cron プロセスに送信され、15 分ごとに実行されます。

同時に、新しく作成されたファイルのコピーが /var/spool/cron ディレクトリに配置され、ファイル名はユーザー名 (つまり dave) になります。

2). crontab ファイルをリストします

crontab ファイルを列挙するには、次を使用できます:

$crontab-l

0,15,30,45,18-06***/bin/echo`date`>dev/tty1

前のものと同様のコンテンツが表示されます。次の方法を使用して、$HOME ディレクトリに crontab ファイルのバックアップを作成できます。

$crontab-l>$HOME/mycron

このようにして、crontab ファイルを誤って削除した場合でも、前のセクションで説明した方法を使用してすぐに復元できます。

3).crontab ファイルを編集します

crontab ファイルのエントリを追加、削除、または編集する場合、EDITOR 環境変数が vi に設定されている場合は、vi を使用して crontab ファイルを編集できます。対応するコマンドは次のとおりです:

$crontab-e

vi を使用して他のファイルを編集するのと同じように、crontab ファイルを変更して終了できます。個々のエントリが変更された場合、または新しいエントリが追加された場合、cron はファイルを保存するときにファイルに対して必要な整合性チェックを実行します。いずれかのフィールドの値が許容範囲を超えると、プロンプトが表示されます。

crontab ファイルを編集すると、新しいエントリが追加される場合があります。たとえば、次の内容を追加します:

#DT:deletecorefiles,at 3.30amon毎月 1、7、14、21、26、26 日

3031,7,14,21,26**/bin/find-name"core'-execrm{};

保存して終了します。 crontab ファイルの各エントリにコメントを追加して、その機能、実行時間、そしてさらに重要なことに、どのユーザーのジョブであるかを把握することをお勧めします。

次に、上記の crontab-l コマンドを使用して、すべての情報をリストしてみましょう:

$crontab-l

#(crondaveinstalledon火曜日5月413:07:431999)

#DT:30 分ごとにコンソールにデータを送信します

0,15,30,4518-06***/bin/echo`date`>/dev/tty1

#DT:deletecorefiles,at 3.30amon毎月 1、7、14、21、26、26 日

3031,7,14,21,26**/bin/find-name"core'-execrm{};

4).crontab ファイルを削除します

crontab ファイルを削除するには、次のコマンドを使用できます:

$crontab-r

5).失われたcrontabファイルを復元します

誤って crontab ファイルを削除した場合は、$HOME ディレクトリにバックアップがまだあると仮定して、そのファイルを /var/spool/cron/ ( はユーザー名) にコピーできます。権限の問題によりコピーを完了できない場合は、次を使用できます:

$crontab

その中には、$HOME ディレクトリにあるコピーのファイル名があります。

このファイルのコピーを $HOME ディレクトリに保存することをお勧めします。私も同様の経験があり、crontab ファイルを何度か削除しました(r キーが e キーのすぐ左側にあるため)。このため、一部のシステム ドキュメントでは、crontab ファイルを直接編集せず、ファイルのコピーを編集して新しいファイルを再送信することを推奨しています。

一部の crontab バリアントは少し奇妙なので、crontab コマンドを使用するときは注意してください。オプションを省略すると、crontab が空のファイルを開いたり、空のファイルのように見える場合があります。このとき、削除キーを押して終了します。押さないと、crontab ファイルが失われます。

####5.使用例

例 1: 1 分ごとにコマンドを実行します

###注文:### ###*****指示###

例 2: 毎時 3 分と 15 分に実行

###注文:###

3,15****コマンド

例 3: 午後 8 時から午後 11 時までの 3 分目と 15 分目に実行します。 ###注文:###

3,158-11***コマンド

例 4: 7 日ごとに午前 8 時から午前 11 時までの 3 分目と 15 分目に実行します。 ###注文:###

3,158-11*/2**コマンド

例 5: 毎週月曜日の朝 8:00 から 11:00 までの 3 分目と 15 分目に実行

###注文:###

3,158-11**1コマンド

例 6: 夕方 21:30 に smb を再起動します

###注文:###

3021***/etc/init.d/smbrestart

例 7: 毎月 1 日、10 日、22 日の 4:45 に smb を再起動します

###注文:###

4541,10,22**/etc/init.d/smbrestart

例 8: 毎週土曜日と日曜日の 1:10 に smb を再起動します

###注文:###

101**6,0/etc/init.d/smbrestart

例 9: 毎晩 18:00 から 23:00 まで 30 分ごとに smb を再起動します

###注文:###

0,3018-23***/etc/init.d/smbrestart

例 10: 毎週土曜日の午後 11 時に smb を再起動します

###注文:###

023**6/etc/init.d/smbrestart

例 11: 1 時間ごとに smb を再起動する

###注文:###

**/1***/etc/init.d/smbrestart

例 12: 午前 11 時から午後 7 時までの間、1 時間ごとに smb を再起動します。 ###注文:###

*23-7/1***/etc/init.d/smbrestart

例 13: 毎月 4 日と毎週月曜日から金曜日の 11 時に smb を再起動します

###注文:###

0114*月-水/etc/init.d/smbrestart

例 14: 10 月 1 日の 4 時に smb を再起動します

###注文:###

041jan*/etc/init.d/smbrestart

例 15: /etc/cron.hourly ディレクトリ内のスクリプトを 1 時間ごとに実行します

###注文:###

01****rootrun-parts/etc/cron.hourly

イラスト:

run-parts パラメータ。このパラメータを削除すると、ディレクトリ名の代わりに実行するスクリプトの名前を記述することができます

4.使用上の注意

1. 環境変数の問題に注意してください

時々 crontab を作成することがありますが、このタスクを手動で実行するのは困難ですが、このタスクを自動的に実行することには問題はありません。これらの状況は通常、crontab ファイルで環境変数が構成されていないことが原因で発生します。

crontab ファイルで複数のスケジュール タスクを定義する場合、非常に注意が必要な問題の 1 つは、環境変数の設定です。タスクを自動的に実行するとき、タスクは現在のシェル環境で実行され、プログラムは実際にタスクを見つけることができるためです。環境変数。また、システムがタスクのスケジュールを手動で実行する場合、環境変数はロードされません。このため、Linux オペレーティング システムを導入するには、タスクの実行に必要なすべての環境変数を crontab ファイルで指定する必要があります。このように、システムがタスクのスケジューリングを実行する場合、問題は発生しません。

cron が必要な特別な状況を知っているとは考えないでください。実際にはそうではないようです。したがって、手動で設定した一部のグローバル変数だけでなく、必要なパスと環境変数をすべてシェル スクリプトに指定する必要があります。そのため、次の 3 つの点に注意してください。

1) スクリプトにファイル パスが含まれる場合は、グローバル パスを記述します。

2) スクリプトの実行に Java またはその他の環境変数が必要な場合は、次のようなソース コマンドを通じて環境変数を導入します。

catstart_cbp.sh

#!/bin/sh

ソース/etc/プロファイル

exportRUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh-cmev&

3) スクリプトの自動実行はOKだが、crontabが実行されない場合。現時点では、環境変数が原因であると大胆に疑う必要があり、問題を解決するために crontab に環境変数を直接導入してみることができます。のように:###

0****./etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit.sh

2. システム ユーザーの電子メール ログのクリアに注意してください

各タスクの実行がスケジュールされた後、システムはタスクの出力情報を現在のシステム ユーザーに電子メールで送信します。時間の経過とともにログ情報が非常に大きくなり、システムの通常の動作に影響を与える可能性があります。Linux運用および保守ブログでは、各タスクをリダイレクトすることが非常に重要です。

たとえば、crontab ファイルに次のメソッドを設定して、ログ出力を無視することができます:

0*/3***/usr/local/apache2/apachectlrestart>/dev/null2>&1

"/dev/null2>&1" は、標準出力はすでに /dev/null にリダイレクトされているため、最初に標準出力を /dev/null にリダイレクトし、次に標準エラーを標準出力にリダイレクトすることを意味します。標準エラーも/dev/nullにリダイレクトされるので、ログ出力の問題は解決します。

3. システムレベルのタスクスケジューリングとユーザーレベルのタスクスケジューリング

システム レベルのタスク スケジューリングは、主にシステムの一部のメンテナンス操作を完了します。ユーザー レベルのタスク スケジューリングは、主に一部のユーザー定義タスクを完了します。ユーザー レベルのタスク スケジューリングは、システム レベルのタスク スケジューリングで完了できます (これは推奨されません)。その逆は機能しません。root ユーザーのタスク スケジュール操作は、「crontab-uroot-e」を通じて設定することも、スケジュール タスクを /etc/crontab ファイルに直接書き込むこともできます。システム タスクのスケジュールされた再起動を定義するには、タスクを /etc/crontab ファイルに配置する必要があります。ただし、root ユーザーでシステムを定期的に再起動するタスクを作成することも無効です。

4.その他の注意事項

新しく作成された cron ジョブはすぐには実行されません。実行には少なくとも 2 分かかります。 cron が再起動されると、すぐに実行されます。

crontab が突然失敗した場合は、/etc/init.d/crondrestart を試して問題を解決できます。または、ログをチェックしてジョブが実行されたかどうかを確認するか、エラーを報告するか tail-f/var/log/cron します。

crontab-r をランダムに実行しないでください。ユーザーの Crontab ファイルを Crontab ディレクトリ (/var/spool/cron) から削除します。このユーザーの crontab をすべて削除すると、それらは消えてしまいます。

% は crontab では特別な意味を持ち、改行を意味します。これを使用する場合は、ワイルドカード % を使用する必要があります。たとえば、一般的に使用される日付「%Y%m%d」は crontab では実行されないため、日付「%Y%m%d」に置き換える必要があります。

新しい説明: ログ レコード vim-f/var/log/cron (vim スケジュールされたタスクのログ パス) を確認し、スケジュールされたタスクが有効になっているかどうかを確認します。servicecrondstatus

以上がLinux でのタスク スケジューリングは 2 種類のユーザー crontab サービスに分かれていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はitcool.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。