Cronによるスケジュールタスク
cronジョブを作成・管理してサーバー上の定期タスクを自動化し、指定した間隔でスクリプトやコマンドを実行します。
「Cronによるスケジュールタスク」はCoddyKit上の無料Linux Server Deployment & SSH Masteryレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Server Deployment & SSH Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Server Deployment & SSH Masteryコースには全4レッスンが含まれています。
サーバータスクを自動化する理由
サーバー上の手作業は、繰り返しが多く、人的ミスも起こりやすいものです。自動化すれば時間を節約でき、タスクを一貫して実行できます。
毎晩データベースをバックアップしたり、毎週古いログファイルを削除したりする必要があるとします。これらを手作業で行うのは面倒で、忘れやすい作業です。
そこで役立つのがスケジューリングツールです。サーバーが指定した時刻や間隔で自動的にタスクを実行できるため、より重要な作業に集中できます。
Cron を使ってみる:サーバーのスケジューラー
Cron は、Linuxでタスクをスケジュールするための基本的なユーティリティです。サーバーの個人アシスタントのように、コマンドやスクリプトをあらかじめ決めた時刻にバックグラウンドで自動実行します。
このようにスケジュールされたタスクは、cronジョブと呼ばれます。システム上の各ユーザーは、crontab という専用ファイルに自分のcronジョブ一覧を持つことができます。
crontab を編集する
自分のcronジョブを管理するには、crontab コマンドを使用します。
- crontabファイルを編集するには、
crontab -eと入力します。 - 現在のcronジョブを一覧表示するには、
crontab -lと入力します。 - すべてのcronジョブを削除するには、
crontab -rと入力します(使用には注意してください)。
crontab -e を実行すると、デフォルトのテキストエディター(通常は nano または vi)でcrontabが開きます。
crontab の構文:時刻フィールド
crontabの各行は1つのcronジョブを表し、決められた形式に従います。5つの時刻フィールドに続いて、実行するコマンドを指定します。
形式は次のとおりです。
minute hour day_of_month month day_of_week command- Minute:0~59
- Hour:0~23(0は午前0時)
- Day of Month:1~31
- Month:1~12(またはJan~Dec)
- Day of Week:0~7(0または7は日曜日、1は月曜日)
crontab の構文:アスタリスクと範囲
常に正確な数値を指定する必要はありません。Cronには、柔軟な指定を可能にする特殊文字があります。
*(アスタリスク):そのフィールドで指定可能な「すべて」の値に一致します。例:分フィールドの*は「毎分」を意味します。-(ハイフン):範囲を指定します。例:時フィールドの9-17は「9時から17時まで」を意味します。,(コンマ):値のリストを指定します。例:曜日にMon,Wed,Friまたは1,3,5を指定します。/(スラッシュ):間隔値を指定します。例:分フィールドの*/5は「5分ごと」を意味します。
crontab の構文:実践例
理解を深めるため、よく使われる例を見てみましょう。
* * * * * /path/to/script.sh
毎分実行します。0 3 * * * /usr/bin/backup.sh
毎日午前3時に実行します。0 9-17 * * 1-5 /usr/local/bin/check_service.py
月曜日から金曜日まで、午前9時から午後5時の間、毎時実行します。*/15 * * * * echo "Hello, CoddyKit!"
15分ごとに実行します。
/path/to/script.sh は、実際に使用するコマンドまたはスクリプトのパスに置き換えてください。
crontab の特殊文字列
よくあるスケジュール指定には、5つのフィールドによる構文より読みやすい特殊文字列がCronに用意されています。
@reboot:起動時に1回実行します。@hourly:毎時0分に1回実行します。@daily:毎日午前0時に1回実行します。@weekly:毎週日曜日の午前0時に1回実行します。@monthly:毎月1日の午前0時に1回実行します。@yearly(または@annually):毎年1月1日の午前0時に1回実行します。
単純な繰り返しタスクに便利です。
環境変数とパス
Cronがジョブを実行するときに使用する環境変数は、ごく限られています。そのため、ターミナルでは動作するコマンドがCronでは失敗することがあります。
問題を避けるには、次の点に注意してください。
- コマンドやスクリプトには、必ず絶対パスを使用します(
phpではなく/usr/bin/phpなど)。 - crontabファイル内で
PATH変数を直接定義できます。例:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - または、スクリプト内で環境変数を直接設定します。
出力とログを扱う
デフォルトでは、Cronはcronジョブの標準出力(stdout)と標準エラー出力(stderr)を、そのcrontabの所有者にメールで送信しようとします。メールシステムを設定していない場合、出力が失われたり、ログファイルがいっぱいになったりする可能性があります。
出力は明示的にリダイレクトするのがベストプラクティスです。
- すべての出力を破棄するには:
command > /dev/null 2>&1 - 出力をログファイルに追記するには:
command >> /var/log/myjob.log 2>&1
2>&1 の部分は、標準エラー出力(2)を標準出力(1)と同じ場所にリダイレクトします。
システム全体のCronとユーザーのcrontab
ここまでは、crontab -e で管理する個人用のユーザーcrontabを中心に説明してきました。これは個々のユーザーのタスクに適しています。
システム全体のタスクには、管理者が次のものを使うことがよくあります。
/etc/crontab:システムのメインcrontabで、特定のユーザーとしてタスクを実行できます。/etc/cron.d/:アプリケーションによってインストールされることが多い、個別のcronファイル用ディレクトリです。/etc/cron.hourly/、/etc/cron.daily/など:システムのCronによって、指定した間隔で実行するスクリプトを配置するディレクトリです。
これらのシステムレベルの方法を使うと、サーバー全体の自動化をより細かく制御できます。
Cronの知識を確認する
crontabの構文の基本を学びました。次のcronジョブを読み解けるか確認してみましょう。
まとめ:Cronで自動化する
Cronでタスクをスケジュールするための基本を習得しました。
ここまでに学んだ内容は次のとおりです。
- Cronとは:時間ベースのジョブスケジューラーです。
- Crontab:cronジョブを定義するための個人用ファイルです。
- 構文:5つの時刻フィールドと特殊文字(
*、-、,、/)を理解します。 - 特殊文字列:
@hourlyや@rebootなどのショートカットです。 - ベストプラクティス:絶対パスを使用し、出力を適切に処理します。
Cronを使えば定型的な作業を自動化でき、サーバーをスムーズかつ効率的に運用できます。
よくある質問
「Cronによるスケジュールタスク」レッスンは無料ですか?
はい。「Cronによるスケジュールタスク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Server Deployment & SSH Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Server Deployment & SSH Masteryコースには全4レッスンが含まれています。
「Cronによるスケジュールタスク」で何を学びますか?
cronジョブを作成・管理してサーバー上の定期タスクを自動化し、指定した間隔でスクリプトやコマンドを実行します。 ブラウザで直接実行するハンズオンコードでLinux Server Deployment & SSH Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Server Deployment & SSH Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Server Deployment & SSH Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Cronによるスケジュールタスク」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Server Deployment & SSH Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Server Deployment & SSH Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ユーザーとグループの管理
- システムプロセスの監視
- Cronによるスケジュールタスク
- systemdによるシステムサービスの管理