web-dev-qa-db-ja.com

Cronjobはjsonを間違ったディレクトリに保存します

Ubuntu 16.04にはPHPスクリプトを実行するCronジョブがあります

$parseinfo = 'parseme.json';
$handle = fopen($parseinfo, 'w');
fwrite($handle, json_encode($res));

データをJSONファイルに解析します。 PHPスクリプトは、このPHPスクリプトがある同じフォルダー内にデータを書き込むことになっていますが、JSONがルートのホームディレクトリに保存されるという問題に直面しました。

これは私がCronジョブを設定する方法です:

*/10 * * * *  root    /usr/bin/php    /var/www/somederictory/somefolder/parse.php > /dev/null

ターミナルから:

ssh [email protected]
cd /etc
crontab -e
:x

つまり、JSONは/rootに保存されていますが、/var/www/somederictory/somefolder/に保存したいのですが、それを修正するにはどうすればよいですか?

編集:それは複製ではなく、PHPは機能し、JSONは保存されていますが、間違った方法です。そして、私は現在のCron設定の何が悪いのかを理解するのを助けたいと思っています。

3
vNottbeck

デフォルトでは、Cronジョブはユーザーのホームディレクトリで実行されます。スクリプトには、出力ファイルを保存するパスが指定されていませんが、スクリプトが実行されるディレクトリに保存されます。

質問によると、.jsonファイルを、スクリプトが置かれているのと同じディレクトリに生成する必要があります。そのため(この場合)、次のように何らかの方法でコードを変更する必要があります。

$parseinfo = 'parseme.json';
$path = realpath(dirname(__FILE__));
$handle = fopen("$path/" . $parseinfo, 'w');
fwrite($handle, json_encode($res));

スクリプトを変更したくない場合は、次の方法でCronジョブを変更できます。

*/10 * * * * root    cd /var/www/somederictory/somefolder/ && php parse.php > /dev/null
6
pa4080