cronの使い方|Linuxの定期実行を完全マスターするタスク自動化術【記法・ログ管理も網羅】

cronの使い方|Linuxの定期実行を完全マスターするタスク自動化術【記法・ログ管理も網羅】

cronの使い方|Linuxの定期実行を完全マスターするタスク自動化術【記法・ログ管理も網羅】

Linuxサーバー運用に欠かせない「cron」。この記事では、crontab記法の基礎からステップ記法の注意点、ログの確認方法、anacronやsystemdとの違いまで、実務で役立つ知識を網羅的に解説します。

目次

cronとは?Linuxタスクスケジューラの基礎知識

cronはUnix系OSで動作するデーモンプログラムで、指定した時刻にコマンドやスクリプトを自動実行できます。主にバックアップやログローテーション、定期レポート生成などの運用タスクを無人化し、管理者の手動作業を削減します。

cronと合わせて使用されるanacronは、常時稼働しない環境でも未実行のジョブを補完します。また、近年はsystemdタイマーが代替手段として注目されており、サーバー要件に応じて選択できます。

crontab記法の基本構文とステップ記法の注意点

crontabは「分 時 日 月 曜日 コマンド」の5フィールドで記述します。ワイルドカード(*)、カンマ(,)で複数指定、ハイフン(-)で範囲指定、スラッシュ(/)でステップ指定が可能です。

ただし”*/15″などのステップ記法は、実装によっては曜日フィールドで非対応の場合があるため、環境に応じて動作確認が必要です。

また、”@reboot”はcronデーモン起動時に1回実行され、ユーザーのログイン時ではない点に注意してください。

参考:crontab(5) – Linux manual

各フィールドの意味(分・時・日・月・曜日)

1: 分(0〜59)、2: 時(0〜23)、3: 日(1〜31)、4: 月(1〜12)、5: 曜日(0〜7、0と7は日曜)。英語略称(mon,tueなど)も可読性向上に役立ちます。

例えば「30 2 * * 1」は毎週月曜2時30分、「30 2 *  *  1」のようにフィールド間に正確なスペースが必要です。

特殊文字と略称活用例

*: 全ての値、”,”: 複数指定、”-“: 範囲指定、”/”: ステップ指定。@hourly/@daily/@weekly/@monthlyはそれぞれ毎時・毎日・毎週・毎月実行の簡易表現です。

@rebootはcron起動時に1度だけ実行されますが、一部ディストリビューションでサポート外の場合があるため、代替にsystemdタイマーを検討してください。

cronジョブ管理:登録・編集・削除とアクセス制御

ユーザーごとのcronは「crontab -e」で編集し、「crontab -l」で一覧表示、「crontab -r」で全削除します。直接/var/spool/cron/配下を編集せず、必ずコマンド経由で操作してください。

※保存先はRHEL系: /var/log/cron、Debian系: /var/spool/cron/crontabs/などディストリビューションで異なる場合があります。アクセス制御は/etc/cron.allowや/etc/cron.denyで設定し、不要ユーザーのジョブ実行を制限します。cron.allowが存在する場合は、その中に記載されたユーザーのみがcronの利用を許可されます。cron.allowが存在せずcron.denyのみが存在する場合は、denyに記載されていないすべてのユーザーが利用可能です。

システム全体のジョブ:/etc/crontab & /etc/cron.d

/etc/crontabや/etc/cron.d/*.confはシステムワイドの設定場所です。各行にユーザー指定フィールドが付加され、run-parts互換のスクリプトは/etc/cron.dailyなどに配置します。

run-partsとは、指定されたディレクトリ内にある複数のスクリプトを連続して実行するコマンドです。 テスト実行は「run-parts –test /etc/cron.daily」で動作確認が可能です。

実行環境の落とし穴:環境変数・SHELL・パス・権限

cron実行時はデフォルトで最小限の環境しか読み込まれないため、SHELL=/bin/bashやPATH=/usr/local/bin:/usr/bin:/binを設定し、スクリプト内はコマンドを絶対パスで記述します。

スクリプトに実行ビット(chmod +x)を付与し、所有者・実行ユーザーを適切に管理することで失敗リスクを低減できます。

参考:cron(8) – Linux manual

ログ確認とトラブルシューティング手法

cronのログはOSによって異なり、Red Hat系は/var/log/cron、Debian系は/var/log/syslogに記録されます。ログ解析は「grep CRON /var/log/cron」や「grep CRON /var/log/syslog」で実行履歴を把握します。

ジョブ内で標準出力・標準エラーをリダイレクトしファイル保存すると、詳細な情報が得られます。

実用例:バックアップ & メール通知の自動化

毎日深夜2時に/home配下を圧縮バックアップし、実行結果をメール送信する例です。
MAILTO="admin@example.com"
0 2 * * * /usr/bin/tar czf /backup/home_$(date +%F).tgz /home

※なお、`%F`は「YYYY-MM-DD」形式の出力ですが、一部の古い環境では対応していない場合があります。その場合は代わりに`%Y-%m-%d`を使用すると互換性が高まります。

事前にmailユーティリティのSMTP設定を行い、cron設定内でMAILTOを指定することで結果レポートが管理者へ送られます。

anacron & systemdタイマーとの比較

anacronは24時間以上稼働しないマシン向けに、スケジュールが未実行の場合でも起動後に実行保証します。一方systemdタイマーはユニット管理下で細かな依存制御が可能です。

サーバー要件や可用性要件に応じ、cron/anacron/systemdを適切に選択してください。

セキュリティとベストプラクティス

cronジョブ内にパスワードや機密情報をベタ書きしないよう注意し、必要な情報は外部設定ファイルや環境変数経由で読み込みます。

スクリプトファイルのパーミッションは最小限とし、実行ユーザーを限定することでリスクを抑制します。加えてジョブの説明をコメントで明記し、定期的な設定レビューを実施しましょう。

まとめ:安定運用に向けたタスク自動化術

この記事ではcronの基本から応用、anacronやsystemdタイマーとの比較、セキュリティ注意点まで幅広く解説しました。適切な設定とテスト、ログ監視を組み合わせることで、Linuxサーバー上で信頼性の高いタスク自動化環境を構築できます。

▼関連記事:ステップアップしたい方はこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次