リダイレクトするときにfile descriptor out of range: Permission denied
crontabにタスク書いたのに実行されなかったときのメモ。
エラー内容をコピペしてググっても全く出てこないので。
PHPで作ったタスクに
*/5 * * * /usr/bin/php test.php 12345>>/var/log/test.log 2>>/var/log/test_error.log
みたいな感じでcrontabに書いたんですが全く実行されませんでした。
ログとか確認しても何も出ないので何でかなーと思ってたんですが、これをこのままコピペして貼り付けたらエラーが出ました
$ /usr/bin/php test.php 12345>>/var/log/test.log 2>>/var/log/test_error.log file descriptor out of range: Permission denied
直訳すると範囲外の数字です的なエラーですね。
原因
標準ストリームのファイル記述子として認識された。
標準出力は1、標準エラー出力は2みたいな感じで12345もストリームと認識されたんだと思います。
解決法
引数とリダイレクトの間にスペースを入れる。
$ /usr/bin/php test.php 12345>>/var/log/test.log 2>>/var/log/test_error.log
これを
$ /usr/bin/php test.php 12345 >>/var/log/test.log 2>>/var/log/test_error.log
こうする。わかりづらいですね。
もしくは文字列とする
$ /usr/bin/php test.php "12345">>/var/log/test.log 2>>/var/log/test_error.log
文字列の場合はストリームのファイル記述子とは認識されませんでした。