ノート:

Oracle LinuxでタスクをスケジュールするためのCrontabユーティリティの使用

開始する前に

このチュートリアルでは、Oracle Linuxでcrontabコマンドを使用する方法を示します。

バックグラウンド

Oracle Linuxでは、スケジュールされたタスクまたはジョブとしてプログラムを自動的に実行できます。/etc/cron*でcron構成を編集してシステム・レベルのタスクとして実行するプログラムをスケジュールするか、ユーザーcrontab内でジョブとして実行するプログラムをスケジュールできます。システムでシステム管理者アクセス権限を持っていない場合、またはスケジュールするプログラムがユーザーアカウントに固有である場合、crontabユーティリティーは、独自のユーザー資格情報で定期的にプログラムを実行するための適切なメカニズムを提供します。crontabを使用すると、ジョブを1分ごとに、または年に1回ほど頻繁に実行するようにスケジュールできます。ただし、ジョブの実行がスケジュールされている間にシステムが停止している場合、cronジョブは実行されないことに注意してください。

cron構成はほとんどのLinuxシステムでは標準であり、1975年以降、Unixのようなシステムで使用可能になっています。より複雑なスケジューリング・ソリューションは、タイマーの形式でSystemdに組み込まれており、ユーザーは、特定の要件を解決するために、より深いシステム・タイマーを検討することをお薦めします。ただし、このチュートリアルでは、平均ユーザーにより適した基礎トレーニングを提供します。

必要事項

目的

このチュートリアルで次を学習します:

crontabファイルのコンテンツのリスト

ノート: 無料ラボ環境を使用する場合、接続およびその他の使用手順については、Oracle Linux Labの基本を参照してください。

crontab -lコマンドを使用してcrontabファイルのコンテンツをリストします。

crontab -l

ユーザーにcrontabエントリが存在しない場合は、次のメッセージが表示されます。

no crontab for oracle

crontabの作成または編集

  1. crontab –eコマンドを使用して、デフォルト・エディタでcrontabを開きます。

    crontab -e
    

    Oracle Linuxのデフォルト・エディタはvimエディタです。

  2. ファイルの末尾に次の行を追加して、echoコマンドを毎分実行するcrontabジョブを作成します。

    * * * * * echo "Hello World"
    

    vimの場合:

    • 'Shift- g'を押して、ファイルの下部に移動できます。
    • 「i」キーを押して挿入モードに入ります。
    • crontab行を入力します。
    • [Esc]キーを押して挿入モードを終了します。
    • 「: wq」と入力してファイルを書き、エディタを完成させます。

    この手順では、crontabをインストールし、すぐにアクティブにします。

    crontab: installing new crontab
    
  3. crontab内のエントリをリストして、新しいエントリを表示します。

    crontab -l
    

各ジョブは、crontabの独自の行に表示されます。crontabには、構成可能な異なる期間を定義する5つのスペース区切りフィールドがあり、そのあとにジョブに対して実行されるコマンドが続きます。このコマンドは、システムのコマンド行で実行できる任意のコマンドと同等であり、独自のスクリプトを実行したり、パイプやリダイレクション演算子を利用したりできます。

cronエントリの出力を確認してください

デフォルトでは、最小限のOracle LinuxシステムまたはOracle Linuxプラットフォーム・イメージにMail Transport Agent (MTA)がインストールされていません。MTAが見つからない場合、cronデーモンはcrontabで指定されたコマンドからの出力をSyslogデーモンに転送します。Oracle Linuxの新しいインストールで、/var/log/cronのログファイル内のcrontab出力を表示できます。

次のコマンドを実行して、新しいcrontabエントリによって生成された出力を表示します。

sudo tail /var/log/cron

cronタスクは1分ごとに実行されるため、コマンドを実行する前に1分間待機する必要がある場合があります。このcronエントリの出力は次のようになります。

Jun 30 12:39:02 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)

この出力は、コマンドが実行されたユーザー、実行されたコマンド、およびコマンド出力を表示します。

postfixsendmailなどのMTAがインストールされている場合、crontabエントリからの出力を、crontabエントリが実行されているユーザーのメールスプールに送信します。これについては、このチュートリアルの後半で詳しく説明します。

Crontab時間順序オプション

Crontab時間フィールドは、次の順序で定義されます。

次のいずれかの時間フィールド内で特殊文字を使用できます。

また、crontabでは、特別な短縮拡張を使用して、一般的な時間要件の時間フィールドを置き換えることもできます。重要なこととして、この短縮形には、リブート後にコマンドを実行するオプションも含まれています。

crontabは1分の粒度のみを提供します。毎分より頻繁に実行されるcrontabエントリを設定するのは簡単ではありません。これを処理できるツールを探している場合は、Systemdタイマーユニットを調べてください。

crontabを編集して、異なる時間シーケンスで実行中のコマンドを試します。

  1. crontab –eコマンドを使用して、デフォルト・エディタでcrontabを開きます。

    crontab -e
    
  2. crontabに次のエントリを追加します。

    */15 * * * * echo "This crontab entry runs every 15 minutes"
    10 * * * * echo "This crontab entry runs at 10 minutes past every hour"
    30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday"
    @reboot echo "This command runs once after a reboot event"
    
  3. crontabファイルを保存して終了します。

Crontabコマンドの構文

crontabコマンドは、crontabが属するユーザーの資格証明の下で実行され、次のようなデフォルトの環境変数が設定されます。

別の環境変数は、時間フィールドを含まないcrontab内の行として指定することで設定できます。たとえば、bashシェルを使用し、個人の.bashrc構成を使用してすべての変数および設定を定期的にインポートする場合、crontabを編集して次のように表示できます。

SHELL=/bin/bash
* * * * * source $HOME/.bashrc;

crontabジョブに対して実行されるコマンドはシェル環境内で実行されるため、標準のシェル構文が適用され、出力のパイプまたはリダイレクトに使用できます。たとえば、すべての出力を /dev/nullにリダイレクトし、結果としてジョブのメール出力を無効にするには、コマンドのSTDOUTおよびSTDERR出力に標準シェルリダイレクトを使用します。

* * * * * /path/to/command > /dev/null 2>&1

または、出力をリダイレクトして、実行されるたびにコマンド出力を追跡するために使用できるファイルに追加することもできます。

* * * * * /path/to/command >> $HOME/command.log

crontabを編集してコマンド構文を試します

  1. crontab -eコマンドを使用して、エディタでcrontabを開きます。

  2. 次のエントリを追加します。

    */15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1
    * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
    

    crontabユーティリティによって%文字が改行文字に変更され、最初の%以降のすべてのデータが標準入力としてコマンドに送信されるため、dateコマンドの%文字がエスケープされます。詳細は、man 5 crontabを参照してください。

  3. ファイルを保存して終了します。

1分以内に、crontab.logファイルが$HOMEディレクトリに表示されます。このファイルの内容を表示するには、次を実行します。

tail $HOME/crontab.log

ローカル・メール・スプール内のcrontab出力にアクセスします

MTAがインストールされている場合、デフォルトでは、すべてのcrontab出力がユーザーのシステムメールスプールに電子メールで送信されます。

ノート: 次の手順は目的のみであり、メール転送エージェント(MTA)の完全な構成については説明しません。構成のデフォルトは、インストールに適していない可能性があります。システムで事後修正を有効にしている場合は、適切に構成する方法については、Oracle Linux: Install the Postfix Email Serverも参照してください。

crontabのメール処理が正しく機能するには、MTAを正しくインストール、構成、および有効にする必要があります。この演習の目的で、次の手順を実行して、postfix MTAがローカルメールを処理できるようにします。

  1. postfixパッケージをインストールします。

    sudo dnf install -y postfix
    
  2. postfixサービスを有効にして起動します。デフォルトの構成では、Postfixをローカル配信MTAとしてのみ有効化します。

    sudo systemctl enable --now postfix.service
    
  3. メール配信を処理するためにpostfix MTAの使用を開始するように、crondサービスを再起動します。

    sudo systemctl restart crond.service
    

出力を代替メール・アドレスにリダイレクトするようにcrontabを構成していない場合、またはcronジョブの出力を破棄するようにcrontabを構成していない場合は、各ジョブの出力がユーザーのローカル・メール・スプールに自動的に配信されます。通常、メール・スプールは単一のメール・ファイルとして格納され、/var/spool/mail/$USERでアクセスできます。最近のアクティビティを単純に監視している場合は、このファイルを調整してメールが配信されたときに表示されるのが最も簡単です。

tail -f /var/spool/mail/$USER

管理可能なインタフェースの各cronジョブの出力を確認するには、mailxパッケージをインストールし、mailコマンドを使用してメールスプールの内容を表示します。

sudo dnf install -y mailx
mail

メールは次の方法で一覧表示されます。

Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N  1 (Cron Daemon)         Wed Aug  5 23:48  30/1436  "Cron oracle
&

表示するメール・メッセージの番号を入力します。たとえば、1を入力してキューの最初のメッセージを表示します。

& 1
Hello World

headerコマンドを使用してメール・ヘッダーのリストに戻るか、quitコマンドを使用してアプリケーションを終了します。

crontabにMAILTO環境変数を設定することによって、cron出力をメール送信するために使用される電子メールアドレスを変更できますが、外部メール配信を処理するようにシステムを構成する必要があります。MAILTO環境を空の値に設定すると、出力は破棄され、crontab内の任意のcronジョブに対してメールは送信されません。

crontab全体を削除します

crontab -rコマンドを使用して、ユーザーのcrontab全体を削除します。

crontab -r

このコマンドは、ユーザー用に指定したすべてのcronジョブエントリを削除します。特定のジョブ・エントリのみを削除する場合は、crontab -eを使用してcrontabを編集し、削除するジョブの行を削除します。

これらの機能の詳細は、man 5 crontabおよびman systemd.timerを参照してください。

ビデオ・デモ

Oracle Linuxでcrontabユーティリティを操作する方法の詳細は、Oracle Linux Automating Tasks Cron Utilityでビデオ・デモンストレーションが提供されています。

詳細情報

その他の学習リソース

他のラボをdocs.oracle.com/learnで探すか、Oracle Learning YouTubeチャネルでより無料の学習コンテンツにアクセスします。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品のドキュメントは、Oracle Help Centerを参照してください。