テクノロジー · 実用ガイド
手動では動くのに crontab では失敗?スクリプトを変える前に cron の実行環境を再現する
cron が行を起動した事実を確認し、実ユーザー、シェル、環境、作業ディレクトリ、出力先を端末実行と比較して一回の予約実行を検証します。

対話端末で成功したコマンドでも、cron は別のプロセス環境で起動するため失敗できます。ユーザー、シェル、PATH、HOME、作業ディレクトリ、秘密情報の入手元、出力処理が異なる場合があります。
最初から権限を広げたりログインプロファイル全体を読み込んだりせず、起動、出力、最小環境の再現を順に証明し、欠けた依存だけを追加します。
1. cron が起動を試みたことを証明
編集前に実際の crontab、cron/crond の状態、予定時刻のシステムログを読みます。イベントなし、シェル起動済み、プログラム非ゼロ終了は別の障害です。
一回だけ stdout と stderr を保護された絶対パスへ書き、数値終了値と時刻を追記します。メール出力を使う実装なら配信も別に確認します。
2. 正確な crontab とユーザーを特定
行がユーザー、root、/etc/crontab、/etc/cron.d のどこにあるか記録します。システム形式にはユーザー欄があり、同じ行のコピーで解釈が変わります。
予約アカウントで id、グループ、HOME、SHELL、crontab を記録します。編集した管理者が実行者とは限りません。
3. 実行環境の差分台帳を作る
必要と確認した PATH、ロケール、プロキシ、設定、資格情報ファイル位置だけを比較します。手引きは cron が SHELL、HOME、LOGNAME を設定すると説明します。
環境全体を公開ログへ出すとトークンが漏れます。変数名と伏せた存在だけを記録し、解釈系と実行ファイルは絶対パスで確認します。
4. パスと作業ディレクトリを明示
Cron がスクリプトのディレクトリから始まる保証はありません。明示的な cd -- /absolute/project && command、または全入出力とロックを絶対パスにします。
予約ユーザーのディレクトリ検索権限と同じ名前空間でのファイル存在を確認します。root の端末成功は一般ユーザーのアクセス証明ではありません。
5. 待たずに失敗を再現
予約ユーザーで env -i を使い、HOME、PATH、SHELL と確認済み変数だけで一回実行します。次の時刻を待たず境界を再現できます。
crontab と同じ解釈系、作業場所を使います。縮小テストが失敗すれば環境かプログラム仮定、成功すれば予定、daemon、方針を調べます。
6. 依存を一つ直して一回検証
不足したパス、変数、cd、資格情報ファイル、サービス依存だけを加えます。副作用を把握せずプロファイル全体を読み込まず、秘密を crontab やログへ置きません。
短い一回を予約し、開始、終了、終了値、期待成果物を必須にします。確認後は本番間隔へ戻し、一時ログを外して伏せた台帳を残します。
