Linuxサーバーでcronジョブを設定するには、まずタスクを実行するユーザーを決定し、絶対パスを含むスクリプトを準備します。次に、crontab -eコマンドまたは/etc/crontabを使用してスケジュールを追加します。スケジュールを検証し、ログ(syslogまたは/var/log/cron)を確認し、簡単な出力でテストして、ジョブが期待どおりに実行されることを確認します。
このステップバイステップガイドでは、2026年にLinuxサーバー上でcronジョブを設定する方法を解説します。cron構文、ユーザーとシステム全体のcrontabの違い、ログ記録、トラブルシューティング、セキュリティのベストプラクティスなどについて詳しく説明しています。Linuxサーバー環境でcronジョブを設定する方法を初めて学ぶ方でも、実践的な例や本番環境で役立つヒントが満載です。
Cronとは何か、そして2026年にそれが重要な理由?
Cronは、ほとんどのLinuxディストリビューションに組み込まれている時間ベースのスケジューラです。決まった日時や間隔でバックグラウンドタスクを実行するため、バックアップ、ログローテーション、キャッシュウォームアップ、データベースメンテナンス、レポート作成などに最適です。systemdタイマーの普及にもかかわらず、Cronは依然として、ディストリビューションを問わず繰り返し実行可能なサーバージョブをスケジュールするための最もシンプルで移植性の高い方法です。
前提条件とクイックチェックリスト
- シェルアクセス(SSH)をLinuxサーバーに転送します。
- 必要に応じてsudo権限を持つ非rootユーザー。
- 基本的なコマンドライン操作の知識。
- エディタセット (nano/vim) 使用時
crontab -e. - インストールされたパッケージ:
cron/cronieサービスが実行中です。
# Ubuntu/Debian
sudo apt update && sudo apt install cron
sudo systemctl enable --now cron
# CentOS/RHEL/AlmaLinux/Rocky
sudo dnf install cronie
sudo systemctl enable --now crondLinuxにおけるCronの仕組み
ユーザーによるcrontabとシステム全体のcronの比較
- ユーザーcrontab: 各ユーザーは、以下の方法で編集したプライベートスケジュールファイルを持っています。
crontab -eジョブはそのユーザーの権限で実行されます。 - システム全体:
/etc/crontabおよびファイル/etc/cron.d/ジョブのスケジュール設定が可能で、ジョブごとにユーザーフィールドを指定できます。グローバルタスクやサービスレベルのタスクに便利です。
Cronディレクトリと実行パーツ
/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly: 定義済みの時間に実行される実行可能スクリプトをここにドロップします (managedによってrun-parts).- これらのディレクトリはシステムメンテナンスには最適ですが、カスタムスケジュールにはユーザー crontab または
/etc/cron.d/.
Cron構文解説(例付き)
時間フィールドと特殊文字列
標準的なcrontabエントリでは、コマンドの後に5つの時刻フィールドが続きます。これらのフィールドは、分、時、日、月、曜日です。
# m h dom mon dow command
5 2 * * * /usr/local/bin/backup.sh特殊な文字列は、一般的なスケジュールを簡素化します。
@reboot /usr/local/bin/startup-task.sh
@hourly /usr/local/bin/rotate-cache.sh
@daily /usr/local/bin/report.sh
@weekly /usr/local/bin/cleanup.sh
@monthly /usr/local/bin/archive.sh演算子:アスタリスク、カンマ、ダッシュ、スラッシュ
- *: 任意の値(毎分、毎時間など)。
- ,: リスト (例:
1,15,30). - –: 範囲 (例:
1-5月曜日から金曜日まで(日曜日=0/7の場合)。 - /: ステップ (例:
*/1010単位ごとに)。
# Every 10 minutes, weekdays 9:00–18:59
*/10 9-18 * * 1-5 /usr/local/bin/poll-metrics.sh手順:LinuxサーバーでCronジョブを設定する
ステップ1 — 適切なユーザーを選択する
必要最小限の権限でジョブを実行してください。可能な場合は、専用のサービスユーザーを使用してください。root権限のcronジョブは、システムバックアップなど、真に高いアクセス権限が必要なタスクのために確保してください。
ステップ2 — スクリプトを安全に準備する
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Example: write timestamp to a log
echo "$(date -Is) - Job ran" >> /var/log/myjob.log- バイナリファイルとファイルには絶対パスを使用してください。
- 既知の値を設定する
PATHスクリプト内部(cronの環境は最小限です)。 - スクリプトを実行可能にします。
chmod +x.
ステップ3 — 環境変数を設定する
変数はcronごと、またはスクリプト内で定義できます。よく使われる例は以下のとおりです。 PATH, MAILTO, SHELLまた、新しいバージョンのcronでは、 CRON_TZ ジョブごとのタイムゾーン。
# Top of your crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
# Optional per-job timezone (supported on many distros)
CRON_TZ=UTCステップ4 — cronジョブを追加する
# Edit user crontab
crontab -e
# List current jobs
crontab -lシステム全体のジョブについては、編集してください。 /etc/crontab またはファイルを追加する /etc/cron.d/システム全体のエントリでは、コマンドの前にユーザーフィールドが追加されることに注意してください。
# /etc/crontab example (note the 'user' field)
# m h dom mon dow user command
5 2 * * * root /usr/local/bin/backup.shステップ5 — 検証とテスト
# Quick test: run every minute (then remove after verifying)
* * * * * /usr/bin/date >> /tmp/cron_test.txt 2>&1数分待ってから出力を確認してください。うまくいったら、実際のスケジュールに置き換えてください。出力とエラーは常にログに記録してください。 >> /var/log/myjob.log 2>&1.
実際に使えるCronの例
# 1) Nightly database backup at 02:15 UTC
15 2 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1
# 2) Run a script every 5 minutes
*/5 * * * * /usr/local/bin/refresh-cache.sh >> /var/log/cache.log 2>&1
# 3) Weekday job at 09:00 and 13:00
0 9,13 * * 1-5 /usr/local/bin/report.sh
# 4) At reboot (e.g., start a worker)
@reboot /usr/local/bin/start-worker.sh
# 5) Monthly cleanup on the first at 00:30
30 0 1 * * /usr/local/bin/cleanup.shトラブルシューティング:Cronが実行されない場合は、次の手順を実行してください。
- サービス状況を確認する:
- ログを確認します。
- 絶対パスを使用してください。CronのPATHには制限があるため、通常のシェルで動作するコマンドがCronでは動作しない場合があります。
- 権限:スクリプトが実行可能かつ読み取り可能であることを確認してください。ディレクトリはトラバーサルを許可する必要があります。
- 環境: スクリプトまたはcrontabで必要な変数をエクスポートします。
- シェルの違い: セット
SHELL=/bin/bashBash固有の構文を使用する場合。 - ファイルを許可/拒否する:
/etc/cron.allowor/etc/cron.denyユーザーを制限する場合があります。 - 時間とタイムゾーン: システム時刻を確認します (
timedatectl)およびCRON_TZ使用法。
本番環境におけるセキュリティとベストプラクティス
- 最小権限の原則:必要がない限り、root権限ではなく、専用ユーザーとして実行してください。
- バージョン管理:スクリプトはGitで管理し、CI/CD経由でデプロイして手動での移行を回避する。
- ログ記録とローテーション:すべての出力をログに記録し、大きなログファイルの場合はlogrotateを設定します。
- 入力検証:環境入力を信用しない。変数をサニタイズする。
- フルパスを使用してください。バイナリファイルとファイルは絶対パスで指定する必要があります。
- ロック:フロックを使用して重なりを防ぐ:
- 監視:メール、Slack、または監視スタックの障害発生時にアラートを発信します。
Cron、Anacron、systemdタイマー:どれを使うべきか?
- Cron:常に稼働しているサーバーで、タスクを正確な時間に実行する必要がある場合に最適です。
- Anacron:スケジュールされた時間にマシンがオフになっていた場合でも、定期的なジョブが実行されることを保証します(例:ノートパソコン、開発用仮想マシン)。
- systemdタイマー:強力な依存関係とカレンダー構文を備えた最新の代替手段。サービスに最適。 managesystemd による d。
ほとんどのサーバー自動化には、cronで十分です。依存関係が必要な場合は、 management、ランダムな遅延、または systemd ユニットとの密接な統合がある場合は、重要な cron ジョブをタイマーに変換することを検討してください。
マネージドホスティングとWordPressサイトにおけるCronの活用
共有 ホスティングまたはcPanelコントロールパネルのUIからcronジョブを追加できます。WordPressの場合、擬似cron(wp-cron.php) 実際の cron を使用すると、特にトラフィックの多いサイトで信頼性とパフォーマンスが向上します。
# Disable WP pseudo-cron in wp-config.php
define('DISABLE_WP_CRON', true);
# Real cron every 5 minutes
*/5 * * * * /usr/bin/php /var/www/html/wp-cron.php >> /var/log/wp-cron.log 2>&1ホストする場合 YouStableさん managed VPS クラウドサーバーを使用する場合でも、弊社のチームが本番環境に対応したcron、ログ記録、監視機能を事前に設定することで、バックアップ、キュー、WordPressタスクが最小限のオーバーヘッドで予測通りに実行されるようにいたします。
監視、ログ記録、およびアラート
- メールアラート:設定
[email protected]ジョブの出力結果をメールで受け取る。 - 構造化ログ:ファイルにログを記録し、rsyslogまたはジャーナルを使用して取り込み、一元的に分析します。
- 終了コード:スクリプトをラップして、失敗時にゼロ以外の値を出力し、Slack/Webhook経由でアラートを発信します。
- ヘルスダッシュボード:最終実行日時、実行時間、および成功指標を追跡します。
# Example wrapper with exit-status logging
/usr/local/bin/task.sh >> /var/log/task.log 2>&1
status=$?
if [ $status -ne 0 ]; then
echo "$(date -Is) - task failed with $status" | mail -s "Cron Failure" [email protected]
fi避けるべき一般的な間違い
- 相対パスを使用するか、対話型シェルのPATHを前提とします。
- cron ではパーセント記号 (%) をエスケープし忘れると、パーセント記号は改行として扱われます。コマンドを引用符で囲むか、必要に応じてエスケープしてください。
- 間違ったcrontabを編集している(rootユーザーか一般ユーザーか)。
- ログをスキップすると、デバッグが困難になる。
- ジョブの重複とデータ破損を防ぐには、
flockまたはPIDファイル。
結論
設定 Linuxサーバー上のcronジョブ 重要なのは、適切なユーザーを選択し、明確なスケジュールを使用し、堅牢なスクリプトを作成し、ログを監視することです。上記の手順と例に従って、再起動やアップデート後も存続する信頼性の高い安全なジョブをスケジュールします。安心してセットアップと監視を行うには、 YouStable できる manage 本番環境のワークロードにはcronを使用します。
よくある質問:LinuxサーバーでCronジョブを設定する方法
Linuxでcronジョブをスケジュールするにはどうすればよいですか?
ラン crontab -e5 つの時間フィールドとコマンドを含む行を追加し、保存します。例: 0 3 * * * /usr/local/bin/backup.sh 毎日午前3時に実行されます。絶対パスを使用し、設定します。 PATH または、crontab の先頭で定義し、以下で検証します。 crontab -l.
cronのログはどこに保存されますか?
Ubuntu/Debianでは、cronメッセージは /var/log/syslog とと journalctl -u cronRHEL/CentOS/Alma/Rocky では、 /var/log/cron or journalctl -u crondトラブルシューティングを容易にするため、ジョブの出力は必ずファイルに記録してください。
5分ごとに実行されるcronの正しい構文は何ですか?
分欄にステップ値を入力してください。 */5 * * * *。 例: */5 * * * * /usr/local/bin/task.sh >> /var/log/task.log 2>&1これは毎時0分、5分、10分、15分…と順に実行されます。
再起動時にcronジョブを実行するにはどうすればよいですか?
追加する @reboot crontabへのエントリ: @reboot /usr/local/bin/startup.shスクリプトが冪等性を適切に処理し、その動作をログに記録するようにしてください。これは、サーバー起動時に実行されるキューワーカー、監視エージェント、キャッシュウォーマーなどに役立ちます。
ユーザーcrontabと/etc/crontabの違いは何ですか?
ユーザーごとのcrontabはスケジュールをユーザーごとに分離し、ユーザーフィールドは含みません。 /etc/crontab システム全体に適用され、特定のユーザーとしてコマンドを実行するためのユーザー列が追加されます。アプリ固有のタスクにはユーザーcrontabを推奨します。システムタスクには、 /etc/crontab or /etc/cron.d/.
