Linux ユーザー制御のスケジュールされたタスク Crontab コマンドとその詳細な説明とは何ですか

伊谢尔伦
リリース: 2017-05-30 14:56:08
オリジナル
2111 人が閲覧しました

Linux システムは cron (crond) システム サービスによって制御されます。 Linux システムには計画されたタスクが多数あるため、このシステム サービスはデフォルトで開始されます。さらに、ユーザーがスケジュールされたタスクを自分で設定することもできるため、Linux システムでは、ユーザーがスケジュールされたタスクを制御するためのコマンド (crontab コマンド) も提供します。

1. crond の概要

crond は、Linux で特定のタスクを定期的に実行したり、特定のイベントの処理を待機したりするために使用されるデーモン プロセスです。これは、Windows のインストール時にスケジュールされたタスクに似ています。このサービスツールは crond プロセスを自動的に起動します。crond プロセスは実行すべきタスクがあるかどうかを 1 分ごとに定期的に確認し、実行すべきタスクがある場合は自動的に実行されます。

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

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

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

cat /etc/crontab

SHELL=/bin/bash

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

MAILTO= HOME=/

# run-parts

51 * * * * root run-parts /etc/cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly


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

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

ユーザー権限ファイル:

ファイル:

/etc/cron.deny

説明:

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

ファイル:

/etc/cron.allow

説明:

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

ファイル:

/var/spool/cron/

説明:

すべてのユーザーの crontab ファイルが保存されるディレクトリの名前は次のとおりですユーザー名

crontab ファイル 意味:

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

分 時 日 月 週 コマンド

ここで:

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

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

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

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

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

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

上記の各フィールドでは、次の特殊文字も使用できます:

アスタリスク (*): すべての可能な値を表します。たとえば、月フィールドがアスタリスクの場合、それは、他のフィールドの制約が満たされている場合は、このコマンドを毎月実行します。

コンマ (,): カンマ区切りの値を使用してリスト範囲を指定できます (例: 「1,2,5,7,8,9」)

Hence (-): ハイフンを使用できますbetween integers 「2-6」は「2,3,4,5,6」を意味するなど、整数の範囲を表します

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

2. Crondサービス

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

yum install crontabs

サービス操作手順:

/sbin/service crond start //サービスを開始します

/sbin/service crond stop //サービスを終了します

/sbin /service crond restart //サービスを再起動します

/sbin/service crond reload //設定を再読み込みします

/sbin/service crond status //サービスを開始します


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

ntsysv

起動時に自動起動を追加します:

chkconfig –level 35 crond on

3 crontab コマンドの詳細な説明

1.コマンド形式:

crontab [-u user] file

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

2.コマンド機能:

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

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

-u user: 特定のユーザーの crontab サービスを設定するために使用されます。たとえば、「-u ixdba」は、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 ファイルを作成します

cron プロセスに crontab ファイルを送信することを検討する前に、最初に行うことは環境変数 EDITOR を設定することです。 cron プロセスは、これを使用して、crontab ファイルの編集に使用するエディタを決定します。 9 UNIX および LINUX ユーザーの 9% が vi を使用している場合は、$HOME ディレクトリ内の . プロファイル ファイルを編集し、次の行を追加します。出口 。 という名前のファイルを作成することを検討してください。ここで、 はユーザー名です (例: davecron)。このファイルに次の内容を追加します。

# (ここに独自のイニシャルを入力してください) 日付をコンソールにエコーします

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

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

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

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

$ crontab davecron

ファイルが cron プロセスに送信されたので、ファイルは cron プロセスに送信され、1 回ごとに実行されます。 5分。

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

2) crontab ファイルを一覧表示します

crontab ファイルを一覧表示するには、次のコマンドを使用できます:

$ crontab -l

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

上記と同様の内容が表示されます。この方法を使用して、$H O M E ディレクトリに crontab ファイルのバックアップを作成できます:

$ crontab -l > $HOME/mycron

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

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

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

$ crontab -e

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

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

# DT:delete core files,at 3.30am on 3.30 on each month of 1,7,14,21,26,26 days

30 3 1,7,14,21,26 * * /bin/find -name “core' -exec rm {} ;

ここで保存して終了します。機能や実行時間などがわかるように、crontab ファイルの各エントリの上にコメントを追加することをお勧めします。重要なのは、これがどのユーザーのジョブであるかを知ることです。

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

$ crontab -l

# (crontab は、火曜日 5 月 4 日 13:07:43 にインストールされました) 1999)

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

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

# DT: 削除コア ファイル、毎月 1、7、14、21、26、26 日の午前 3 時 30 分

30 3 1,7,14,21,26 * * /bin/find -name “core ' -exec rm { ;

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

crontab ファイルを削除するには、

$ crontab -r

5) を使用します。

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

$ crontab

ここで、 は、$H O M E ディレクトリにコピーしたファイルの名前です。

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

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

5.使用例

インスタンス 1: 1 分ごとに
コマンドを実行:
* * * * * コマンド

インスタンス 2: 毎時 3 分と 15 分に
コマンドを実行:
3,15 * * * * コマンド

インスタンス 3: 午前 8 時から午前 11 時までの 3 分目と 15 分目に実行します
コマンド:
3,15 8-11 * * * コマンド

インスタンス 4: 2 日ごとの午前 8 時 3 分目と 15 分目から 11 時まで'クロック
コマンドを実行します:
3,15 8-11 */2 * * コマンド

例 5: 毎週月曜日の午前 8 時から 11 時までの 3 分目と 15 分目
コマンドを実行する分数:
3, 15 8-11 * * 1 コマンド

インスタンス 6: 毎晩 21:30 に smb を再起動
コマンド:
30 21 * * * /etc/init.d/smb restart


インスタンス 7: 4 に smb を再起動毎月 1 日、10 日、22 日の:45
コマンド:
45 4 1,10,22 * * /etc/init.d/smb restart


インスタンス 8: 毎週土曜日、1:10 に smb を再起動します日曜日
コマンド:
10 1 * * 6,0 /etc/init.d/smb restart


インスタンス 9: 毎日 18:00 から 23:00 まで 30 分ごとに smb を再起動します
コマンド:
0,30 18-23 * * * /etc/init.d/smb restart


インスタンス 10: 毎週土曜日午後 11:00 に smb を再起動します
コマンド:
0 23 * * 6 /etc/ init.d/smb restart


インスタンス 11: 1 時間ごとに smb を再起動します
コマンド:
* */1 * * * /etc/init.d/smb restart


インスタンス 12: 午後 11 時から午前 7 時までの間、1 時間ごとに smb を再起動します
コマンド:
* 23 -7/1 * * * /etc/init.d/smb restart

インスタンス 13: 毎月 4 日と毎週月曜日から水曜日の 11 時 smb を再起動します
コマンド:
0 11 4 * mon-wed / etc/init.d/smb restart

例 14: 1 月 1 日 4 時に smb を再起動します
コマンド:
0 4 1 jan * /etc/init .d/smb restart


例 15: /etc/cron.hourly ディレクトリ内のスクリプトを 1 時間ごとに実行します
コマンド:
01 * * * * * root run-parts /etc/cron.hourly
指示:
run-parts このパラメータを削除すると、次のことが可能になります。ディレクトリ名の代わりに実行するスクリプト名を記述します。 4. 使用上の注意

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

crontab ファイルで複数のスケジュール タスクを定義する場合、特に注意が必要な問題の 1 つは環境変数の設定です。これは、タスクを手動で実行するときは、当然ながら現在のシェル環境で実行するためです。システムが自動的にタスクのスケジュールを実行する場合、環境変数はロードされないため、タスクの実行に必要なすべての環境変数を crontab ファイルに指定する必要があります。タスクのスケジューリングを実行します。

cron が必要な特別な環境を知っていると想定しないでください。実際にはそうではありません。したがって、自動的に設定される一部のグローバル変数を除き、必要なパスと環境変数をすべてシェル スクリプトに指定する必要があります。したがって、次の 3 つの点に注意してください:

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

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

cat start_cbp. sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local /jboss-4.0.5/bin/ run.sh -c mev &

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

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

各タスクの後にシステム ユーザーの電子メール ログをクリーンアップすることに注意してください。システムは、タスクの出力情報を電子メールで現在のシステム ユーザーに送信します。時間が経つと、ログ情報が非常に大きくなり、システムの通常の動作に影響を与える可能性があります。そのため、それぞれをリダイレクトすることが非常に重要です。タスク。

たとえば、ログ出力を無視するには、crontab ファイルに次の形式を設定できます。

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

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

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

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

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

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

% は crontab では特別な意味を持ち、改行を意味します。これを使用する場合は、% をエスケープする必要があります。たとえば、頻繁に使用される日付「+%Y%m%d」は crontab では実行されないため、日付「+%Y%m%d」に置き換える必要があります。

以上がLinux ユーザー制御のスケジュールされたタスク Crontab コマンドとその詳細な説明とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート