Cron式ジェネレーター
入力モード
分 時 日 月 曜日 (5 標準 cron)
シェアする
使い方
- 1 「解析」モード: 既存のCron式(例: 0 9 * * 1-5)を入力すると、自然言語の説明と次回実行時刻が表示。
- 2 「生成」モード: 分・時・日・月・曜日を個別に指定すると、Cron式が自動生成されます。
- 3 プリセット(毎日9時・平日のみ・5分ごと等)から選択も可能。各フィールドは <code>*</code>(任意)・<code>5</code>(固定)・<code>0-23</code>(範囲)・<code>*/5</code>(間隔)・<code>1,3,5</code>(複数)対応。
- 4 次回実行時刻はJST(日本時間)で5回分表示。サーバーのタイムゾーンが異なる場合は注意。
Cron式ジェネレーターについて
よくある質問
Q 平日のみ実行するcron式は?
<code>0 9 * * 1-5</code>(月曜〜金曜の毎日9時0分)。曜日フィールドの<code>1-5</code>は1=月曜・5=金曜の範囲を意味します。<strong>0=日曜・6=土曜・7=日曜(両方OK)</strong>。土日の場合は<code>0 9 * * 6,0</code>(土・日)で表現。注意: 日曜の数字は実装で異なり、Linux cronは0と7両方OK、GitHub Actionsは0、Quartzは1〜7(1=日曜)です。
Q 5分ごとに実行するには?
<code>*/5 * * * *</code>です。分フィールドの<code>*/5</code>は0,5,10,15…55という意味。同様に<code>*/10</code>で10分ごと、<code>*/15</code>で15分ごとに。<strong>注意: GitHub Actionsの最低間隔は5分</strong>(より短いと無視される)、Cloudflare Workersは1分間隔OKです。
Q 毎月最終日に実行するには?
標準POSIX cronでは表現できません。多くの実装で拡張機能<code>L</code>が使えます: <code>0 23 L * *</code>(月末23時)。Linux cron(古いバージョン)はL未対応のため、シェルスクリプトで判定が必要: <code>[ "$(date -d tomorrow +\%d)" = "01" ] && ./script.sh</code>を毎日実行。Quartz・AWS EventBridgeはLサポート。本ツールはL認識します。
Q GitHub Actions で時刻通り実行されない
GitHub Actionsの<strong>scheduled workflowは実際に最大15〜30分の遅延</strong>があります。GitHub公式ドキュメントでも「混雑する時刻(毎時0分等)で遅延が顕著」と言及。<strong>正確性が必要なら自前cronサーバー・AWS EventBridge</strong>(数秒以内)を使ってください。GitHub Actionsは「だいたい時刻」程度で済むワークフロー(週次レポート等)向け。
Q cronで重複実行を防ぐには?
<strong>排他ロック</strong>を使います。Linuxでは<code>flock</code>コマンドが標準的:</p><p><code>* * * * * flock -n /tmp/job.lock /path/to/script.sh</code></p><p><code>-n</code>はロック取得失敗時に即終了。これで前回ジョブが終わっていなければ次は実行されません。Pythonならfile lock、PHPなら<code>flock()</code>関数、データベースなら<code>SELECT FOR UPDATE</code>等で実装できます。
Q タイムゾーンが違う環境でcron組むには?
UTC基準で書くのが安全です:</p><ul class="ri-ul"><li><strong>JST 9:00</strong> = UTC 0:00 → <code>0 0 * * *</code></li><li><strong>JST 12:00</strong> = UTC 3:00 → <code>0 3 * * *</code></li><li><strong>JST 18:00</strong> = UTC 9:00 → <code>0 9 * * *</code></li></ul><p>Kubernetes CronJobなら<code>spec.timeZone: "Asia/Tokyo"</code>でJST指定可能。AWS EventBridge も<code>cron(0 9 * * ? *)</code>のあと<code>Asia/Tokyo</code>指定。本ツールはJST基準で表示しますが、UTCの実環境では9時間ずらしてください。
Q 分単位より短いスケジュールは?
標準cronは1分単位が最小です。<strong>秒単位はsystemd timer・Quartz・Spring @Scheduled等</strong>を使う必要あり。例えばsystemd timerで「30秒ごと」なら<code>OnCalendar=*-*-* *:*:00,30</code>。Cloudflare Workersは1分以上、AWS EventBridgeも1分以上、Vercel Cronは1分以上。秒単位ジョブはコンテナ内で<code>while true; do…; sleep 30; done</code>パターンも実用的。
Q cronで環境変数が読み込まれない
cronは<strong>非対話シェル</strong>で実行されるため、<code>~/.bashrc</code>・<code>~/.profile</code>を読み込みません。対策:</p><ul class="ri-ul"><li>crontabの先頭で環境変数定義: <code>PATH=/usr/local/bin:/usr/bin:/bin</code></li><li>スクリプト内で明示的に読み込み: <code>source ~/.profile</code></li><li>絶対パスでコマンド指定: <code>/usr/bin/php /var/www/job.php</code></li><li>systemd timerなら<code>EnvironmentFile=/etc/cron-env</code>で外部定義可</li></ul>
Q cronのログを確認するには?
</p><ul class="ri-ul"><li><strong>Ubuntu/Debian</strong>: <code>grep CRON /var/log/syslog</code></li><li><strong>RHEL/CentOS</strong>: <code>tail -f /var/log/cron</code></li><li><strong>systemd</strong>: <code>journalctl -u cron</code> または <code>journalctl _COMM=crond</code></li><li><strong>各ジョブの出力</strong>: cron式の最後に<code>>> /var/log/myjob.log 2>&1</code>でリダイレクト推奨</li></ul><p>本番システムでは <strong>Datadog・New Relic・Sentry等のAPM</strong>でcronジョブの実行状態を監視することが推奨されます。