На этот вопрос уже есть ответ:
В 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 /
{{1} } Что мне делать, чтобы это исправить?
Edit: Это не дубликат, PHP работает, JSON сохраняется, но неправильно. И я прошу помочь мне понять, что не так с текущими настройками Cron.
Кроном по умолчанию задания выполняются в корневом каталоге пользователя. В то время как в Вашем сценарии не обеспечивается путь, где выходной файл, который будет сохранен, он будет сохранен в каталог, где сценарий выполняется.
Согласно вопросу, Вы хотите генерировать .json
файл в тот же каталог, где сценарий расположен. Так (в этом случае) необходимо изменить код в некотором роде, подобный как это:
$parseinfo = 'parseme.json';
$path = realpath(dirname(__FILE__));
$handle = fopen("$path/" . $parseinfo, 'w');
fwrite($handle, json_encode($res));
Если Вы не хотите изменять сценарий, Вы могли бы сменить работу Крона таким образом:
*/10 * * * * root cd /var/www/somederictory/somefolder/ && php parse.php > /dev/null