Cronjob сохраняет JSON в неправильный каталог

В Ubuntu 16.04 есть задание Cron, которое запускает скрипт PHP

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

проанализировать данные в файл JSON. Предполагается, что PHP-скрипт записывает данные в ту же папку, где находится этот PHP-скрипт, но я столкнулся с проблемой, что JSON сохраняется в домашнем каталоге root:

Вот как я установил работу Cron:

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

С терминала:

ssh root@example.com
cd /etc
crontab -e
:x

Вкратце: JSON сохраняется в /root пока я хочу сохранить его в /var/www/somederictory/somefolder/ Что я должен сделать, чтобы это исправить?

Изменить: Это не дубликат, PHP работает, JSON сохраняется, но неправильно. И я прошу помочь мне понять, что не так с текущими настройками Cron.

1 ответ

Решение

По умолчанию задания 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
Другие вопросы по тегам