web-dev-qa-db-fra.com

Cronjob enregistre JSON dans un mauvais répertoire

Il existe un travail Cron sur Ubuntu 16.04 qui exécute un script PHP

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

analyser les données dans un fichier JSON. Le script PHP est supposé écrire des données dans le même dossier que celui où se trouve ce script PHP, mais le problème est que JSON est enregistré dans le répertoire de base de la racine:

Voici comment j'ai défini le travail Cron:

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

Du terminal:

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

En quelques mots: JSON est enregistré dans /root alors que je souhaite l’être dans /var/www/somederictory/somefolder/ Que dois-je faire pour résoudre ce problème?

Edit: Ce n'est pas un doublon, PHP fonctionne, JSON est en cours de sauvegarde, mais de manière erronée. Et je demande de m'aider à comprendre ce qui ne va pas avec les paramètres actuels de Cron.

3
vNottbeck

Par défaut, les travaux Cron sont exécutés dans le répertoire de base de l'utilisateur. Bien que dans votre script ne soit pas fourni le chemin dans lequel le fichier de sortie doit être enregistré, il sera enregistré dans le répertoire où le script est exécuté.

Selon la question, vous souhaitez générer le fichier .json dans le même répertoire que celui où se trouve le script. Donc (dans ce cas) vous devez changer votre code d’une façon ou d’une autre, comme ceci:

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

Si vous ne souhaitez pas modifier le script, vous pouvez modifier le travail Cron de la manière suivante:

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