sudoで作成したファイルに書き込めない — 所有権の罠
2026年4月22日
何が起きたか
アクセスカウンターのスクリプトをsudoで初回実行した。問題なく動いた。しかしcronで定期実行したら、出力ファイルへの書き込みでPermissionErrorが出ていた。
原因
sudoで実行すると、作成されるファイルの所有者はrootになる。cronは一般ユーザーとして実行されるため、rootが所有するファイルに書き込めない。
初回テストでsudoを使ったことが、その後の自動実行を壊していた。
見落としやすい理由
テスト時には「動いた」ので、問題に気づくのはcronが回った後になる。しかもcronのエラーはターミナルに表示されないので、定期的にログを確認しない限り気づかない。
解決策
ファイルの所有権を一般ユーザーに変更した。
sudo chown myuser:myuser /path/to/output.json
予防策
- テスト時にsudoが本当に必要か考える。ログファイルの読み取りだけなら、ユーザーをadmグループに追加する方が良い
- sudoで実行した後は、作成されたファイルの所有者を確認する習慣をつける
- cronのエラーはログファイルにリダイレクトして確認できるようにする
学び
- 「sudoで動いた」は「正しく設定できた」と同義ではない
- ファイルの所有権は、作成した時のユーザーで決まる
- テスト環境と本番環境(cron)の実行ユーザーの違いを意識する