- ベストアンサー
クロンコマンドの記述について
自動作成されるデレクトリに画像コピーしたい テストとして以下のPHPで確認はOK <?php echo "現在の日付は ". date("Ymd"); echo "<br/>\n" ; echo "現在から1日前の日付は ". date("Ymd", strtotime("-1 day")); echo "<br/>\n"; // サーバー内に当日の日付で自動作成されたデレクトリへのパス $test1 = '/home/hoge/public_html/kame/' . date('Ymd') . '/images'; echo $test1; echo "<br/>\n"; // サーバー内の 1日前に自動作成されたデレクトリへのパス $test2 = '/home/yamasei/public_html/11k/kame/' . date('Ymd', strtotime('1 days ago')) . '/images'; echo $test2; ?> echou では意図した通りになるのでサーバーの1日前のデレクトリに画像コピーしたくクロンコマンドに以下のように cp -f /home/hoge/public_html/jibun.jpg /home/hoge/public_html/kame/' . date('Ymd', strtotime('1 days ago')) . '/images クロン実行すると cp: target 'ago)) . /images' is not a directory となります。 コマンドがまちがっているようなのですが自分には解りません。 識者の方、教えて下さいませんか。お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
cronには直接PHPの命令はかけません。 どうしてもPHPでやりたいのなら、 PHPスクリプトにした別ファイルを用意して cronからPHPスクリプトを実行する形になるでしょう。 ですが、この程度なら、PHPの関数を使うまでもないので cronで直接 cp -f /home/hoge/public_html/jibun.jpg /home/hoge/public_html/kame/`date +%Y%m%d -d '1 day ago'`/images で。
その他の回答 (1)
- asciiz
- ベストアンサー率70% (6803/9674)
> date('Ymd', strtotime('1 days ago')) date() はPHP組み込み関数の一つです。 cronにおけるコマンドは、sh シェルスクリプトが実行出来るものでなければなりません。 PHPの関数は使えないのです。 ついでに言うと文字列をドットで連結するのもPHPの記法ですので、シェルスクリプトでは使用できません。 また、cpコマンドでは、「./」は「カレントディレクトリ」を指します。 そういう訳で、 最後の「. '/images」という部分を「カレントディレクトリにある(はず)の image ディレクトリがコピー先」と解釈して、「そんなディレクトリ見つからないけど?(is not a directory)」とエラーが吐かれています。 >cp -f /home/hoge/public_html/jibun.jpg /home/hoge/public_html/kame/' . date('Ymd', strtotime('1 days ago')) . '/images この命令は、shにおいては無茶苦茶なパラメータで実行しようとしていることになっています。(年月日が変換されず、関数名や変換書式パラメータなどがそのままcpコマンドに渡されている) シェルスクリプトの書き方で日時を文字列に変換して…と書きなおすのも手ですが、PHPで組んで実行できているなら、PHPを実行すればよいです。 cronコマンドで実行するのは、例えばご質問のPHPスクリプトが/home/username/datecopy.php に保存されているとして、 0 0 * * * /usr/bin/php /home/username/datecopy.php (毎日0:00に実行)といった物にしてみてください。
お礼
ありがとうございました。 まだまだ勉強ですね。
お礼