すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Cron ジョブ

最終更新日:Feb 18, 2025

このトピックでは、cron の基本的な概念と構文について説明し、一般的な cron 式と使用シナリオを提供します。 このトピックは、cron の動作メカニズムを完全に理解し、cron ジョブの作成、管理、デバッグ方法を学ぶのに役立ちます。

cron の基本原則とコンポーネント

cron とは

Cron は、Linux および UNIX オペレーティングシステムでジョブをスケジュールどおりに実行するために使用されるプログラムです。 Cron を使用すると、スクリプト、コマンド、またはソフトウェアをスケジュールどおりに自動的に実行できます。 Cron は、データバックアップやシステムアップデートなど、定期的に実行する必要があるタスクに適しています。

cron の動作メカニズム

Cron は、crontab(cron テーブル)ファイルに基づいて実行されます。これは、一連のコマンドとそのコマンドの実行スケジュールを含む構成ファイルです。 各アカウントは、ホームディレクトリに独自の crontab ファイルを持つことができます。 システムレベルの crontab ファイルは、管理者レベルで実行されるジョブに使用されます。

Cron デーモンは、crontab ファイルを定期的にチェックし、ファイルに定義されているスケジュールとコマンドを解析し、スケジュールどおりにコマンドを実行します。

Cron のコンポーネント

  1. Cron デーモン: crontab ファイルで指定されたジョブを定期的にチェック、スケジュール、および実行する役割を持つ常駐バックグラウンドプログラムです。

  2. crontab ファイル:

    • アカウントレベルの crontab ファイル: 各アカウントは、crontab -e コマンドを実行することで、アカウントレベルの crontab ファイルで独自の cron ジョブを編集できます。 ジョブは現在のアカウントに対してのみ有効です。

    • システムレベルの crontab ファイル: /etc/crontab ディレクトリに保存されます。 ほとんどの場合、システムレベルの crontab ファイルはシステム管理者によって管理され、システムレベルのジョブを実行するために使用されます。

  3. crontab 構文: crontab ファイルの各行は、分、時、日、月、曜日、および実行するコマンドを表す 6 つのフィールドで構成されます。

Cron 式

cron の動作をより理解するために、次のサンプルコードは単純な crontab ファイルの例を示しています。

# .---------------- 分
# |  .------------- 時
# |  |  .---------- 日
# |  |  |  .------- 月
# |  |  |  |  .---- 曜日 (日曜日=0 または 7)
# |  |  |  |  |
# *  *  *  *  * ユーザー名 実行するコマンド // cron ジョブが実行するコマンドまたはスクリプトのパスを指定します。
  30 04 *  *  *   root     /path/to/daily_backup.sh

この例では、ジョブ構成は、システムが毎日 04:30 に root ユーザーとして daily_backup.sh スクリプトを実行することを示しています。

重要

すべてのコマンド命令またはスクリプトファイルに絶対パスを指定してください。

フィールドの有効な値

次の表は、cron 式でスケジュールを定義するために使用されるフィールドでサポートされている有効な範囲と特殊文字を示しています。

フィールド

フィールド

必須

有効な範囲

はい

[0, 59]

*-/

時間

はい

[0, 23]

*-/

はい

[1, 31]

*-/?LW

はい

[1, 12] または [JAN, DEC]

*-/

曜日

はい

[0, 6]。0 は日曜日、6 は土曜日を表します。7 も日曜日を表すことができます。

*-/?L#

特殊文字の意味と例

特殊文字

意味

*

すべての値を含みます。

0 * * * * command は、コマンドが毎時 0 分に実行されることを示します。

-

範囲を指定します。

0 1-3 * * * command は、コマンドが毎日 1 時 00 分から 3 時 00 分まで毎時実行されることを示します。

/

間隔を指定します。

*/15 * * * * command は、コマンドが 15 分ごとに実行されることを示します。

?

任意の値を指定し、日 フィールドと 曜日 フィールドでのみ使用できます。

0 0 2 ? * * command は、コマンドが毎月 2 日に実行され、曜日は指定されていないことを示します。

L

日 フィールドまたは 曜日 フィールドで使用して、月の最終日または週の最終日を指定できます。

0 0 L * * command は、コマンドが毎月の最終日に実行されることを示します。

W

日 フィールドでのみ使用して、特定の日付に最も近い平日を指定できます。

0 0 15W * * command は、コマンドが毎月 15 日に最も近い平日に実行されることを示します。

#

曜日 フィールドで使用して、曜日と月の週を指定できます。

0 0 * * 3#2 command は、コマンドが毎月第 2 水曜日に実行されることを示します。

説明

Cron 式で L 文字を指定する場合は、式にリストまたは有効値を指定しないでください。Cron 式で L 文字とリストまたは有効値の両方を指定すると、解析エラーまたは論理的な競合が発生する可能性があります。

一般的な Cron 式

Cron 式

意味

シナリオ

* * * * *

Cron ジョブを毎分実行します。

Cron の構成がアクティブ化され、期待どおりに実行されるかどうかをテストおよび確認します。

0 0 * * *

Cron ジョブを毎日 00:00 に実行します。

データセキュリティを確保するために、サーバーデータを毎日リセットまたはバックアップします。

0 2 * * *

Cron ジョブを毎日 02:00 に実行します。

0 1 * * *

Cron ジョブを毎日 01:00 に実行します。

0 6 * * *

Cron ジョブを毎日 06:00 に実行します。

チームメンバーが最新の情報を確認できるように、毎朝データレポートを更新します。

0 12 * * *

Cron ジョブを毎日 12:00 に実行します。

正午に企業内でデータを同期したり、毎日のリマインダーメールを送信したりします。

0 18 * * 1-5

Cron ジョブを毎週月曜日から金曜日まで 18:00 に実行します。

各営業日の終わり前にデータをバックアップして、当日のすべてのデータが保存されるようにします。

0 21 * * *

Cron ジョブを毎日 21:00 に実行します。

商業活動の終了後、業務システムをクリーンアップするか、当日の取引データをバックアップします。

0 0 1 * *

Cron ジョブを毎月 1 日の 00:00 に実行します。

毎月の初めに、財務、売上、またはその他のビジネスレポートを生成します。

0 0 1 1,7 *

Cron ジョブを毎年 1 月 1 日と 7 月 1 日に実行します。

半期データのアーカイブや組織の再構築など、重要なジョブを実行します。

15 14 1 * *

Cron ジョブを毎月 1 日の 14:15 に実行します。

IT システムのセキュリティパッチを監視および更新して、システムセキュリティを確保します。

0 0 * * 0

Cron ジョブを毎週日曜日の 00:00 に実行します。

週末にデータをクリーンアップおよび最適化して、新しい週に向けてクリーンな環境を準備します。

0 0 1 1 *

Cron ジョブを毎年 1 月 1 日に実行します。

システムのリセットや重要なデータのアーカイブなど、重要な年間スタートアップスクリプトを毎年の初めに自動化します。

*/10 * * * *

Cron ジョブを 10 分ごとに実行します。

重要なシステムまたはサービスを継続的に監視して、パフォーマンスと信頼性を確保します。

Cron の詳細については、https://crontab.guru/ をご覧ください。

cron の比較

主要なオペレーティングシステム間での cron の比較

基本的な cron 機能の比較

機能

Linux または Unix cron

macOS cron

BSD cron

Windows タスクスケジューラ

最小実行間隔

1 分

1 分

1 分

1 分

crontab ファイルのデフォルトパス

/etc/crontab

/usr/lib/cron/tabs/

/etc/crontab

該当なし

ユーザーレベルの構成

サポート

サポート

サポート

該当なし

cron 式の特殊文字の比較

特殊文字

Linux または Unix cron

macOS cron

BSD cron

Windows タスクスケジューラ

* (すべての値)

サポート

サポート

サポート

サポート

, (値のリスト)

サポート

サポート

サポート

サポート

- (範囲)

サポート

サポート

サポート

サポート

/ (ステップサイズ)

サポート

サポート

サポート

サポート

L (最後)

特定のディストリビューションでサポート

サポートなし

サポートなし

該当なし

W (曜日)

特定のディストリビューションでサポート

サポートなし

サポートなし

該当なし

# (N 番目の曜日)

特定のディストリビューションでサポート

サポートなし

サポートなし

該当なし

? (指定なし)

特定のディストリビューションでサポート

サポートなし

サポートなし

該当なし

cron 機能の比較

機能

Linux または Unix cron

macOS cron

BSD cron

Windows タスクスケジューラ

環境変数

限定的なサポート

限定的なサポート

限定的なサポート

サポート

実行されなかったタスクの処理

自動的に処理されない

自動的に処理されない

自動的に処理されない

処理ポリシーを設定可能

ログ

syslog

syslog

syslog

イベントビューアー

秒単位のスケジューリング

サポートなし

サポートなし

サポートなし

サポート

GUI

なし

なし

なし

提供

タスクの依存関係

サポートなし

サポートなし

サポートなし

サポート

ネットワークトリガー

サポートなし

サポートなし

サポートなし

サポート

電源管理との統合

サポートなし

サポートなし

サポートなし

サポート

考慮事項

  1. Linux、Unix、macOS、または BSD:

    • 権限の過剰または不足を防ぐために、ファイルの権限を適切に構成します。

    • 環境変数の継承に注意してください。

    • 絶対パスを使用することをお勧めします。

  2. Windows タスクスケジューラ:

    • より多くのトリガーオプションを提供します。

    • より詳細なアクセスの制御をサポートします。

    • システムイベントと統合できます。

  3. クロスプラットフォームの互換性:

    • クロスプラットフォーム cron ジョブをコンパイルする場合は、プラットフォーム間の機能の最小限の共通部分に注意してください。

    • 基本的な時間形式を使用し、特殊文字を使用しないことをお勧めします。

    • Jenkins などのクロスプラットフォームスケジューリングツールを使用します。

主要なフレームワーク間での cron の比較

基本的な構文の比較

機能

Spring Framework

Quartz

Linux cron

Jenkins

Kubernetes CronJob

秒単位のサポート

(オプション) サポート

サポート

サポートなし

サポート

サポートなし

年のフィールド

オプション

サポート

サポートなし

サポート

サポートなし

最小間隔

1 秒

1 秒

1 分

1 秒

1 分

タイムゾーン

サポート

サポート

システムタイムゾーン

サポート

サポート

cron 式の特殊文字の比較

特殊文字

Spring Framework

Quartz

Linux cron

Jenkins

Kubernetes CronJob

* (すべての値)

サポート

サポート

サポート

サポート

サポート

, (値のリスト)

サポート

サポート

サポート

サポート

サポート

- (範囲)

サポート

サポート

サポート

サポート

サポート

/ (ステップサイズ)

サポート

サポート

サポート

サポート

サポート

? (指定なし)

サポート

サポート

サポートなし

サポート

サポートなし

L (最後)

サポート

サポート

部分的にサポート

サポート

サポートなし

W (曜日)

サポート

サポート

部分的にサポート

サポート

サポートなし

# (N 番目)

サポート

サポート

サポートなし

サポート

サポートなし

シナリオの推奨事項

フレームワーク

シナリオ

Spring Framework

- Java プロジェクトの統合

トランザクションが必要なシナリオ

- Spring エコシステムとの緊密な統合

Quartz

- 独立したスケジューリングシステム

- 詳細なタスク制御が必要なシナリオ

- 複雑なスケジューリング要件

Linux cron

- シンプルなシステムタスク

- スタンドアロン環境

- 基本的なスケジューリングタスク

Jenkins

- 継続的インテグレーションと継続的デリバリー/デプロイメント (CI/CD) シナリオ

- 複雑なワークフロー

- 視覚的な管理が必要なシナリオ

Kubernetes CronJob

- コンテナ化された環境

- クラウドネイティブ アプリケーション

- 高可用性とスケーラビリティが必要なシナリオ

考慮事項

  1. 推奨事項:

    • プロジェクトの規模に基づいて適切なフレームワークを選択します。

    • メンテナンスコストとチームの習熟度を考慮します。

    • パフォーマンスと信頼性の要件を評価します。

  2. 互換性:

    • Cron 式はフレームワークによって異なる場合があります。

    • 式をフレームワークに移行する場合は、フレームワークとの Cron 式の互換性に注意してください。

    • タイムゾーンの処理の違いに注意してください。

  3. 監視とメンテナンス:

    • 包括的な監視メカニズムを確立します。

    • ログを収集して分析します。

    • 障害復旧ポリシーを作成します。

ユースケース

データの継続性とセキュリティを確保するために、毎晩 23:00 に 1 つのディレクトリにあるテキストファイルを別のディレクトリに自動的にバックアップします。

考慮事項

  • ソースディレクトリとデスティネーションディレクトリが正しく指定されていることを確認します。この例では、/path/to/original/file.txt がソースディレクトリとして、/path/to/backup/file_backup.txt がデスティネーションディレクトリとして使用されます。

  • 指定したデスティネーションディレクトリが存在するかどうかを確認します。デスティネーションディレクトリが存在しない場合は、最初にディレクトリを作成するか、ディレクトリを作成するためのコマンドを cron ジョブに追加する必要があります。

  • アカウントに、ソースファイルの読み取り権限と、デスティネーションディレクトリへのデータ書き込み権限があることを確認します。

  • cron ジョブが想定どおりに実行され、有効なバックアップファイルが生成されているかどうかを確認するために、バックアップファイルとログを定期的に確認します。

手順

  1. ターミナルを開き、crontab -e コマンドを入力して、アカウントの cron ジョブを編集します。

  2. アカウントの crontab ファイルに次の行を追加して、cron ジョブを追加します。

       0 23 * * * cp /path/to/original/file.txt /path/to/backup/file_backup.txt

    説明:

    • 0 23 * * * は、ジョブが毎日 23:00 に実行されることを指定します。

    • cp /path/to/original/file.txt /path/to/backup/file_backup.txt は、file.txt ファイルがデスティネーションディレクトリにコピーされることを指定します。

  3. crontab ファイルを保存して閉じます。

    • nano エディターを使用する場合は、Ctrl+XY を押して変更を確認して保存し、Enter キーを押してファイルを閉じます。

    • vi または vim エディターを使用する場合は、:wq と入力し、Enter キーを押してファイルを保存して閉じます。

FAQ

Cron ログを表示するにはどうすればよいですか。

ほとんどの場合、Cron ジョブの実行はシステムログに記録されます。Cron ログに基づいて、Cron ジョブがトリガーされたかどうかを確認できます。Cron ログを表示するには、次のコマンドを実行します。

grep CRON /var/log/syslog

コマンド出力には、ジョブ実行レコードを含む、Cron 関連のすべてのログが表示されます。

Cron ジョブの実行タイムアウトの問題を解決するにはどうすればよいですか。

  • Cron ジョブの実行がタイムアウトになった場合は、次の解決策を使用して問題を解決します。

    • コマンドロジックを最適化して、実行時間を短縮します。

    • Cron ジョブを分割できる場合は、ジョブを複数の小さなジョブに分割します。

    • timeout コマンドを [コマンド] フィールドに追加して、Cron ジョブの最大実行時間を変更します。例:0 5 * * * timeout 300 /path/to/script.sh 構成を追加して、ジョブの最大実行時間を 300 秒に制限します。

簡単なテストコマンドを使用するにはどうすればよいですか。

複雑な Cron ジョブを構成する前に、簡単なテストコマンドを使用して、Cron ジョブが期待どおりにトリガーされるかどうかを確認します。たとえば、次のコマンドを実行して、現在の時刻を毎分ファイルに書き込む Cron ジョブを構成します。

* * * * * date >> /path/to/date_output.txt

数分後に date_output.txt ファイルを開き、新しい時間レコードが毎分ファイルに書き込まれているかどうかを確認します。

出力とエラーをログファイルにリダイレクトするにはどうすればよいですか。

リダイレクト構成を Cron 式に追加して、出力とエラーをログファイルにリダイレクトします。このようにして、Cron ジョブが期待どおりに実行されているかどうかを確認し、実行中に発生した出力とエラーを表示できます。

30 4 * * * /path/to/your-script.sh > /path/to/logfile.log 2>&1

/path/to/logfile.log ファイルを確認して、実行中の Cron ジョブの出力とエラーを表示します。

Cron ジョブの頻度を構成するにはどうすればよいですか。

  • Cron ジョブの頻度を構成するには、次の提案を参照してください。

    • Cron ジョブがシステムパフォーマンスに影響を与えないように、ジョブの頻度を過度に高く指定しないことをお勧めします。ジョブの特性に基づいて、Cron ジョブに適切な頻度を指定します。

    • ビジネス要件に基づいて Cron ジョブの頻度を構成します。バックアップなどの単純な日次ジョブは 1 日に 1 回だけ実行する必要がある場合がありますが、特定の監視ジョブは 1 時間ごと、またはより頻繁に実行する必要がある場合があります。

    • システム負荷を考慮します。リソースを大量に消費するジョブは、低負荷時に実行します。

Cron の問題のトラブルシューティングを容易にするために、どのような操作を実行できますか。

  • Cron ジョブの出力とエラーをログファイルにリダイレクトして、問題の追跡を容易にします。例:30 4 * * * /path/to/job.sh > /path/to/job.log 2>&1

  • Cron ジョブで例外が発生した場合、または出力が生成された場合に、Cron デーモンが電子メールで通知を送信するように構成します。システムの電子メール設定が正しく構成されているか、Cron ジョブの電子メール通知が明示的に構成されていることを確認します。

  • ほとんどの場合、絶対パスは相対パスよりも信頼性が高くなります。Cron ジョブでは絶対パスを使用することをお勧めします。

  • Cron ジョブを編集するには、crontab -e コマンドを実行します。アカウントのすべての Cron ジョブを表示するには、crontab -l コマンドを実行します。Cron ジョブが正しく構成されているかどうかを確認できます。

Cron ジョブがスケジュールどおりに実行されないのはなぜですか。

  • 原因と解決策:

    • Cron 式にエラーがある場合は、Cron 式を確認してエラーを修正します。スケジュール設定が正しいことを確認します。

    • アカウントに Cron ジョブを実行するための十分な権限がない場合は、chmod +x /path/to/script.sh コマンドを実行して、アカウントに Cron ジョブを実行するために必要な権限を付与します。

    • 環境の問題が発生した場合、Cron ジョブはアカウントの完全な環境構成を読み込めない可能性があります。Cron ジョブでコマンドの完全なパスを指定するか、コマンドで環境変数を明示的に構成していることを確認します。

    • その他の問題が発生した場合は、Cron ログを確認して問題を特定します。Cron ログの場所は、システム構成によって異なります。ほとんどの場合、Cron ログは /var/log/cron ディレクトリに保存されます。Cron ジョブの出力とエラーを特定のファイルにリダイレクトする場合は、ファイル内のログを表示して、Cron ジョブが期待どおりにトリガーされているかどうか、およびエラーメッセージが返されているかどうかを確認します。

Cron ジョブを有効にするにはどうすればよいですか。

Cron 式の構文を確認します。時刻と日付の構文が正しいことを確認します。crontab -e コマンドを実行して Cron ジョブを編集し、すべてのフィールドが正しく構成されているかどうかを確認します。Cron 式には、次のフィールドが含まれています。

<分> <時> <日> <月> <曜日> <コマンド>

各フィールドが正しいことを確認します。

多くの Linux オペレーティングシステムでは、Cron サービスはサービスの実行中にのみジョブを実行できます。次のコマンドを実行して、Cron サービスのステータスを確認できます。

sudo service cron status

または:

sudo systemctl status cron   

Cron サービスが開始されていない場合は、次のコマンドを実行してサービスを開始します。

sudo service cron start

または:

sudo systemctl start cron

Cron ジョブで指定したスクリプトファイルの実行権限を付与します。次のコマンドを実行します。

chmod +x /path/to/your-script.sh

アカウントのすべての Cron ジョブを表示するにはどうすればよいですか。

crontab -l コマンドを実行して、アカウントのすべての Cron ジョブを表示します。これは、Linux と UNIX で一般的なコマンドです。Cron は時間ベースのジョブスケジューラであり、スケジュールどおりにスクリプトまたはコマンドを自動的に実行できます。

  • 次の項目に注意してください。

    • 前述のコマンドは、現在のアカウントの Cron ジョブのみを表示します。別のアカウントの Cron ジョブを表示するには、必要なシステム権限を取得する必要があります。

    • アカウントに Cron ジョブが構成されていない場合、crontab -l コマンドは情報を表示しない場合があります。

アカウントがアクセスできる Cron ジョブを表示するにはどうすればよいですか。

アカウントがアクセスできる Cron ジョブを表示するには、crontab -l コマンドを実行します。アカウントにルート権限または他のアカウントの Cron ジョブを表示および編集する権限がない場合、前述のコマンドはアカウントに属する Cron ジョブのみを表示します。アカウントにルート権限または他のアカウントの Cron ジョブを表示および編集する権限がある場合は、前述のコマンドを実行し、コマンドでアカウントのユーザー名を指定して、指定したアカウントに属するすべての Cron ジョブを表示できます。

  • 次の項目に注意してください。

    • 通常のアカウントを使用して、アカウントに属する Cron ジョブのみを表示および編集できます。ルートアカウントまたは十分な権限が付与されているアカウントを使用して、すべてのアカウントの Cron ジョブを表示および編集できます。

    • crontab ファイルで定義されている Cron ジョブのコマンドは、簡略化された環境で実行されます。デフォルトでは、多くの環境変数が読み込まれない場合があります。コマンドでは完全なパスを使用することをお勧めします。

crontab ファイルを編集して Cron ジョブを削除するにはどうすればよいですか。

  1. crontab -e コマンドを実行して、デフォルトのエディターでアカウントの crontab ファイルを開きます。デフォルトのエディターは、vi または nano です。

  2. エディターで、削除する Cron ジョブを含む行を見つけ、その行を削除します。vi または vim エディターでは、ポインターをその行に移動し、dd を押して行を削除します。nano エディターでは、矢印キーを使用してポインターを行に移動し、Delete キーを押して行を削除するか、Ctrl+K を押して行を切り取ります。

  3. crontab ファイルを保存して閉じます。

    • vi または vim エディターで、:wq と入力し、Enter キーを押して変更を保存し、ファイルを閉じます。

    • nano エディターで、Ctrl+X を押し、Y と入力して変更を確認して保存し、Enter キーを押してファイルを閉じます。

  4. アカウントからすべての Cron ジョブを削除する場合は、次のコマンドを実行します。

警告

このコマンドは、確認を求めずにアカウントからすべての Cron ジョブを削除します。注意して進めてください。

crontab -r
  • 次の項目に注意してください。

    • Cron ジョブを編集または削除する前に、crontab ファイルをバックアップすることをお勧めします。crontab -l > crontab_backup.txt コマンドを実行して、crontab ファイルの Cron ジョブを別のファイルにバックアップできます。

    • crontab ファイルの Cron ジョブを削除または編集すると、オペレーティングシステムまたはオペレーティングシステム内のアプリケーションが影響を受ける可能性があります。Cron ジョブを削除または編集する前に、操作の潜在的な影響を十分に理解していることを確認してください。

Linux でルート以外のユーザーとして crontab コマンドを実行すると、「You (*) are not allowed to use this program (crontab)」というエラーメッセージが表示される場合はどうすればよいですか。

  1. ルートユーザーとして Linux ECS インスタンスに接続します。

    詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。

  2. 次のコマンドを実行して、cron.allow ファイルと cron.deny ファイルが存在するかどうかを確認します。

    find /etc/cron.allow
    find /etc/cron.deny

    次の表は、cron.allow ファイルと cron.deny ファイルの存在と、crontab コマンドを実行するためのユーザー権限の関係を示しています。

    cron.allow ファイルが存在するかどうか

    cron.deny ファイルが存在するかどうか

    crontab コマンドを実行できるユーザー

    いいえ

    いいえ

    ルートユーザーのみが crontab コマンドを実行できます。

    はい

    いいえ

    cron.allow ファイルで指定されているユーザーのみが crontab コマンドを実行できます。

    いいえ

    はい

    cron.deny ファイルで指定されていないユーザーは、crontab コマンドを実行できます。

    説明

    cron.deny ファイルが空の場合、すべてのユーザーが crontab コマンドを実行できます。

    はい

    はい

    cron.allow ファイルで指定されているユーザーのみが crontab コマンドを実行できます。

    説明

    cron.allow ファイルは cron.deny ファイルよりも優先されます。この場合、cron.deny ファイルは有効になりません。

  3. ビジネスシナリオに基づいて、cron.allow ファイルまたは cron.deny ファイルを変更します。

    • cron.allow ファイルが存在せず、cron.deny ファイルにルート以外のユーザーのユーザー名が含まれている場合は、ユーザー名を削除してから、cron.deny ファイルを保存します。

    • cron.allow ファイルが存在する場合は、ルート以外のユーザーを cron.allow ファイルに追加してから、ファイルを保存します。

  4. 次のコマンドを実行して、Cron サービスを再起動します。

    systemctl restart crond.service
  5. ルート以外のユーザーに切り替えて、crontab コマンドを再度実行します。

Cron 式の [曜日] フィールドに指定できる値、および [曜日] フィールドと [日] フィールドを構成する際に注意する必要がある項目は何ですか。

  • [曜日] フィールドは Cron 式の 5 番目のフィールドであり、Cron ジョブを実行する曜日を指定するために使用されます。

    • 数値形式の有効値:1 ~ 7。週の日曜日から土曜日までを表します。

    • 省略形形式の有効値:SUN、MON、TUE、WED、THU、FRI、SAT。

  • 例:

    1. MON-FRI:月曜日から金曜日までの毎日を指定します。

    2. MON,WED,FRI:毎週月曜日、水曜日、金曜日を指定します。

    3. MON-WED,SAT:月曜日から水曜日までと土曜日を指定します。

    4. 2-6:月曜日から金曜日までの曜日を指定します。この例では、[曜日] フィールドは数値形式です。

    5. SUN,SAT:土曜日と日曜日を含む、毎週末を指定します。

  • 高度な構文:

    1. SUN#1:毎月第 1 日曜日を指定します。

    2. 6L:毎月の最終金曜日を指定します。

    3. */2:1 日おきに指定します。

    4. MON#2:毎月第 2 月曜日を指定します。

  • [曜日] フィールドと [日] フィールドを構成する際には、次の項目に注意してください。

    1. 曜日の省略形は大文字と小文字が区別されません。たとえば、MONmon と同等です。

    2. 曜日が日付と競合しないようにするには、[曜日] フィールドまたは [日] フィールドで ? を使用します。

    3. Cron 式で L 文字と # 文字を使用する場合は、式が有効な日付と一致することを確認します。

    4. [曜日] フィールドに数値形式を使用する場合は、1 は月曜日ではなく日曜日を表すことに注意してください。

Cron 式の [日] フィールドと [曜日] フィールドで L 文字を使用するにはどうすればよいですか。

[日] フィールド
  • L 文字のみを使用する場合は、次の項目に注意してください。

    • L 文字は月の最終日を指定します。

    • 例:0 0 L * ? は毎月の最終日の午前 0 時を指定します。

    • L 文字は、うるう年の 2 月を含む、さまざまな月の日に自動的に適応します。

  • L 文字をオフセット値と一緒に使用する場合は、次の項目に注意してください。

    • L-n 値は、月の末日から N 番目の日の 1 日前を指定します。

    • 例:0 0 L-2 * ? は毎月の末日から 3 日目の午前 0 時を指定します。

[曜日] フィールド
  • L 文字のみを使用する場合は、次の項目に注意してください。

    • L 文字は、週の最終日である土曜日を指定します。

    • 例:0 0 ? * L は毎週土曜日の午前 0 時を指定します。

  • L 文字を数字と一緒に使用する場合は、次の項目に注意してください。

    • nL 値は、月の最後の N を指定します。ここで、N は曜日を表します。

    • 例:6L は月の最終金曜日を指定します。

    • 例:2L は月の最終月曜日を指定します。

  • L 文字を曜日の省略形と一緒に使用する場合は、次の項目に注意してください。

    • XXXL 値は、月の最後の特定の曜日を指定します。

    • 例:FRIL は月の最終金曜日を指定します。

    • 例:MONL は月の最終月曜日を指定します。

考慮事項
  1. 次の組み合わせは使用しないでください。

    • L 文字と範囲またはリスト

    • エラーの例:L,15L-3,15

  2. [日] の適応:

    • L 文字は、さまざまな月の日に自動的に適応します。

    • [日] フィールドは、うるう年の 2 月の場合を正しく処理できます。

  3. [曜日] フィールドを使用する場合は、次の項目に注意してください。

    • [曜日] フィールドで L 文字を使用する場合は、[日] フィールドを ? に設定することをお勧めします。

    • これにより、日付の競合を防ぎます。

  4. 実行時間:

    • Cron ジョブに指定した週の最終日が存在しない場合、ジョブは実行されません。

    • たとえば、2 月には第 5 金曜日がない場合があります。

Linux インスタンスで crontab -e コマンドを実行すると、「errors in crontab file, can't install」というエラーメッセージが表示される場合はどうすればよいですか。

この問題を解決するには、インスタンスにログインして crontab ファイルの Cron 式の形式を変更するか、ファイルが保存されているディスクのサイズを変更します。

  1. Linux ECS インスタンスに接続します。

    詳細については、「ECS インスタンスに接続する方法」をご参照ください。

  2. crontab ファイルのジョブの各 Cron 式の形式が正しいかどうかを確認します。

    • ジョブの各 Cron 式の形式が正しい場合は、ステップ 3 に進みます。

    • Cron ジョブの形式が正しくない場合は、ジョブの Cron 式の形式を修正します。次の図は、ジョブの Cron 式の正しい形式を示しています。

      image.png

  3. 次のコマンドを実行して、ディスク容量の使用率をクエリします。

    df -h

    次のようなコマンド出力が表示されます。[使用率(%)] 列の値は、各ファイルシステムの容量使用率を示しています。この例では、/dev/xvda1 パーティションの容量使用率は 15% です。

    ディスク使用率が 100% に近い場合、ディスク容量が不足しています。crontab -e コマンドを実行する前に、ディスクのサイズを変更することをお勧めします。ディスクのサイズ変更方法については、「概要」をご参照ください。

    image