検索

第39章 自動タスク

download PDF
Linux では、タスクは指定された期間、指定した日付、またはシステムの負荷平均が指定された数を下回る場合に、自動的に実行されるように設定できます。Red Hat Enterprise Linux は、システムを最新の状態に保つために重要なシステムタスクを実行するように事前設定されています。たとえば、locate コマンドで使用される場所のデータベースは毎日更新されます。システム管理者は、自動化されたタスクを使用して、定期的なバックアップの実行、システムの監視、カスタムスクリプトの実行などを行うことができます。
Red Hat Enterprise Linux には、いくつかの自動タスクユーティリティーが同梱されています。cronat、および batch です。

39.1. Cron

Cron は、時間、月、曜日、および週の組み合わせに従って繰り返しジョブの実行をスケジュールするために使用できるデーモンです。
cron は、システムが継続的にオンであると想定しています。ジョブのスケジュール時にシステムがオンになっていない場合は、実行されません。1 回限りのジョブをスケジュールするには、「at および Batch」 を参照してください。
cron サービスを使用するには、vixie-cron RPM パッケージがインストールされ、crond サービスが実行されている必要があります。パッケージがインストールされているかを確認するには、rpm -q vixie-cron コマンドを使用します。サービスが実行されているかどうかを確認するには、コマンド /sbin/service crond status を使用します。

39.1.1. Cron ジョブの設定

cron /etc/crontab の主な設定ファイルには、以下の行が含まれます。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * 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 行は、cron ジョブが実行される環境を設定するために使用される変数です。SHELL 変数は、使用するシェル環境(この例では bash シェル)をシステムに指示しますが、PATH 変数はコマンドの実行に使用するパスを定義します。cron ジョブの出力は、MAILTO 変数で定義されたユーザー名に電子メールで送信されます。MAILTO 変数が空の文字列(MAILTO="")として定義されている場合、電子メールは送信されません。HOME 変数を使用すると、コマンドまたはスクリプトの実行時に使用するホームディレクトリーを設定できます。
/etc/crontab ファイルの各行はジョブを表し、以下の形式になります。
minute   hour   day   month   dayofweek   command
  • minute - 0 から 59 までの整数
  • 時間 - 0 から 23 までの整数
  • day: 1 から 31 までの整数(月を指定する場合は有効な日である必要があります)
  • month - 1 から 12 までの任意の整数(または jan や feb などの月の短縮名)
  • dayOfWeek - 0 から 7 までの 整数。0 または 7 は日曜日(sun または mon などの曜日の短縮名)を表します。
  • command - 実行するコマンド(コマンドは ls /proc >> /tmp/proc などのコマンド、またはカスタムスクリプトを実行するコマンドのいずれかになります)
上記の値のいずれかで、アスタリスク(*)を使用してすべての有効な値を指定できます。たとえば、month 値のアスタリスクは、他の値の制約内の月ごとにコマンドを実行します。
整数間のハイフン(-)は、整数の範囲を指定します。たとえば、1-4 は整数 1、2、3、および 4 を意味します。
コンマで区切られた値のリスト(,)は、リストを指定します。たとえば、3, 4, 6, 8 は、これらの 4 つの特定の整数を示します。
スラッシュ(/)を使用して、ステップの値を指定できます。/<integer> で範囲に従うと、整数値は範囲内でスキップできます。たとえば、0-59/2 を使用して、分フィールドで他のすべての分を定義できます。ステップ値はアスタリスクと併用することもできます。たとえば、月のフィールドに */3 の値を使用して、3 カ月ごとにジョブを実行できます。
ハッシュマーク(#)で始まる行はすべてコメントで、処理されません。
/etc/crontab ファイルにあるように、run-parts スクリプトは、/etc/cron.hourly//etc/cron.daily/、/etc/ cron.weekly/、および / etc/cron.monthly/ ディレクトリーのスクリプトを、時、毎日、毎週、毎月ごとに実行します。これらのディレクトリーのファイルはシェルスクリプトである必要があります。
cron ジョブを hourly、daily、weekly、または monthly 以外のスケジュールで実行する必要がある場合は、/etc/cron.d/ ディレクトリーに追加できます。このディレクトリーのすべてのファイルは、/etc/crontab と同じ構文を使用します。例については、例39.1「/etc/crontab の例」 を参照してください。

例39.1 /etc/crontab の例

# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh
root 以外のユーザーは、crontab ユーティリティーを使用して cron ジョブを設定できます。ユーザー定義の crontab はすべて /var/spool/cron/ ディレクトリーに保存され、作成したユーザーのユーザー名を使用して実行されます。crontab をユーザーとして作成するには、そのユーザーとしてログインし、コマンド crontab -e を入力して VISUAL または EDITOR 環境変数で指定されたエディターを使用してユーザーの crontab を編集します。このファイルは、/etc/crontab と同じ形式を使用します。crontab への変更が保存されると、crontab はユーザー名に従って保存され、ファイル /var/spool/cron/ユーザー名 に書き込まれます
cron デーモンは、変更ごとに /etc/crontab ファイル、/etc/cron.d/ ディレクトリー、および /var/spool/cron/ ディレクトリーをチェックします。変更が見つかった場合は、メモリーに読み込まれます。そのため、crontab ファイルを変更した場合は、デーモンを再起動する必要はありません。
Cron ジョブはランダム間隔で実行できます。これは、ネットワークのオーバーロードを防ぐために高負荷の共有ネットワークに役立ちます。ジョブのランダム化はデフォルトで無効になっていますが、以下のパラメーターを指定して /etc/sysconfig/run-parts ファイルで設定することができます。
  • RANDOMIZE: 1 に設定すると、ランダム化機能が有効になります。0 に設定すると、cron ジョブのランダム化は無効になります。
  • RANDOM - 初期ランダムシードを指定します。1 以上の整数値に設定する必要があります。
  • RANDOMTIME: 1 以上の整数値に設定すると、追加のランダム化レベルが提供されます。

例39.2 /etc/sysconfig/run-parts の例 - Job Randomization の設定

RANDOMIZE=1
RANDOM=4
RANDOMTIME=8

39.1.2. Cron へのアクセスの制御

/etc/cron.allow ファイルおよび /etc/cron.deny ファイルは、cron へのアクセスを制限するために使用されます。両方のアクセス制御ファイルの形式は、各行の 1 つのユーザー名です。空白はいずれのファイルでも許可されません。アクセス制御ファイルが変更された場合、cron デーモン(crond)を再起動する必要はありません。アクセス制御ファイルは、ユーザーが cron ジョブの追加または削除を試みるたびに読み込まれます。
root ユーザーは、アクセス制御ファイルにリストされているユーザー名に関係なく、常に cron を使用できます。
cron.allow ファイルが存在する場合は、そこに記載されているユーザーのみが cron を使用でき、cron.deny ファイルは無視されます。
cron.allow が存在しない場合は、cron.deny に記載されているユーザーは cron を使用できません。

39.1.3. サービスの起動と停止

cron サービスを起動するには、コマンド /sbin/service crond start を使用します。サービスを停止するには、コマンド /sbin/service crond stop を使用します。システムの起動時に サービスを開始することが推奨されます。システムの起動時に cron サービスを自動的に開始する方法は、18章 を参照してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.