LinuxでカスタムCronジョブを作成する

定期的なタスクの自動化は、堅牢なシステム管理やウェブ開発のワークフローにおいて不可欠です。 Cronジョブは、Unix系オペレーティングシステムにおける強力な時間ベースのジョブスケジューラであり、スクリプトやコマンドを自動的にスケジュールされた間隔で実行することを可能にします。

 Cronジョブとは何ですか?

Cronジョブは、システムのcrontab(cronテーブル)に定義されたスケジュールされたタスクで、指定された時間または間隔でコマンドやスクリプトを実行します。Cronは、以下の理由から広く使用されています:

  • 軽量

  • 高度にカスタマイズ可能

  • ほとんどのLinuxディストリビューションに組み込まれている

 一般的な使用例

  • 毎日または毎週のデータベースバックアップ

  •  PHP/Pythonスクリプトの実行

  • ログローテーションと一時ファイルのクリーンアップ

  • スケジュールされたメールの送信

  • データキャッシュの更新やファイルの同期

ステップ1:Crontabにアクセスする

ユーザーのcrontabを編集するには(rootアクセスなし):

crontab -e
rootのcrontabを編集するには(sudoが必要):
sudo crontab -e

ステップ2:Cron構文の内訳

各Cronジョブは次のフォーマットを使用します:

* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └──── Day of the week (0-7, Sunday = 0 or 7)
│ │ │ └────── Month (1–12)
│ │ └──────── Day of the month (1–31)
│ └────────── Hour (0–23)
└──────────── Minute (0–59)

 例:毎日午前2時にスクリプトを実行する

0 2 * * * /home/user/scripts/backup.sh

ステップ3:カスタムスクリプトを作成する

カスタムPythonスクリプトを実行したいとしましょう。まず、ファイルを作成します:

nano /home/user/scripts/cleanup.py

サンプルスクリプト:

#!/usr/bin/env python3
import os
import datetime
log_dir = "/var/log/myapp"
threshold = 7 # days
now = datetime.datetime.now()
for filename in os.listdir(log_dir):
filepath = os.path.join(log_dir, filename)
if os.path.isfile(filepath):
file_age = now - datetime.datetime.fromtimestamp(os.path.getmtime(filepath))
if file_age.days > threshold:
os.remove(filepath)

スクリプトを実行可能にします:

chmod +x /home/user/scripts/cleanup.py

 ステップ4:Cronジョブを追加する

crontabを編集して、次を追加します:

0 1 * * * /home/user/scripts/cleanup.py >> /var/log/cleanup.log 2>&1

これ:

  • 毎日午前1時にスクリプトを実行します

  • 出力を/var/log/cleanup.logに記録します

 使用例

✅ 10分ごとに実行

*/10 * * * * /home/user/check_status.sh

✅ 月曜日の午前3時のみ実行

0 3 * * 1 /home/user/scripts/weekly_report.sh

 Cronジョブを無効にするまたは削除する

行を#でコメントアウトすることで、一時的に無効にします。

すべてのジョブを削除するには:

crontab -r

カスタムCronジョブは、自動化、メンテナンス、信頼性のための強力なツールです。個人のVPSを管理している場合でも、バックエンドスクリプトをデプロイしている場合でも、プロダクションワークロードを実行している場合でも、cronをマスターすることで、タスクがいつ、どのように実行されるかを簡単に制御できます。