linux — запуск php-скрипта с помощью cron: не удалось открыть файл журнала, поэтому такой файл или каталог

У меня Raspberry Pi настроен как ящик для семян. У меня есть задание cron, которое будет запускаться каждые 10 минут, проверьте готовые файлы, используя transmission-remote -l, grep для выполненных записей (100%) получите имена папок, скопируйте их на внешний диск и затем удалите исходные файлы на моем Pi.

Для каждого выполненного действия (добавляется торрент, торрент завершается, передача файлов началась, передача файлов завершена и файлы удалены) запись записывается в мой logfile.log, который находится в том же каталоге, что и все скрипты, ´ / home / pi / dev / ´. Внутри этой папки у меня есть подпапка, logs при этом файлы журналов хранятся на всех ходах от пи до внешнего диска. Все эти файлы журналов названы в честь перемещаемой папки / файла.

Как я уже говорил, каждые 10 минут torrentfinished.phpпроходит через задание cron

*/10 * * * * php -f /home/pi/dev/torrentfinished.php

Весь вывод с работы отправляется на мою почту по адресу /var/mail/pi,

Теперь, если я запускаю скрипт вручную, я могу запустить его из любого места, написав

php -f /home/pi/dev/torrentfinished.php

У меня есть несколько строк отладки, написанных прямо под выполнением каждой команды. (Я использую shell_exec для запуска команд, потому что мне удобнее писать на php, чем на bash).

Это выведет

Started transfer
Wrote transfer to logfile

В logfileзатем добавляется запись с текстом $timestamp : started transfer of data from torrent $torrentname, Отдельный файл создается в logs/$torrentname.log, В принципе все работает отлично.

Однако когда запускается задание cron, я получаю следующий вывод в / var / mail / pi

Unable to open logfile: No such file or directory
Started transfer
Wrote transfer to logfile

Но, как вы, наверное, догадались, ничего не происходит. Файлы остаются на месте на Pi и не передаются. Кроме того, ничего не написано logfile или же logs/$torrentname.log,

Я ломал голову над этим и использовал chmod 777 на большем количестве файлов, чем это может считаться необходимым или безопасным, просто чтобы убедиться, что это не проблема с разрешениями. Возможно, я что-то упустил, конечно, но я бы так не думал. Я также попытался переименовать файл logfile к чему-то еще, но я все еще получаю ту же ошибку.

У меня больше нет идей о том, что делать, поэтому, если у кого-то из вас есть идеи, пожалуйста, расскажите!

0

Решение

Когда вы используете это:

php -f /home/pi/dev/torrentfinished.php

Вы остаетесь в каталоге / home / pi / dev /. И файл журнала пишется в / home / pi / dev / logs

Когда вы запускаете скрипт в cron, базовый каталог является другим (например, это может быть / bin или / usr / bin).

Попробуй использовать DIR или же ФАЙЛ константы, чтобы установить путь к лог-файлу.

1

Другие решения

Это может помочь увидеть фактический код PHP. Моим первым шагом здесь было бы напечатать код logfile поэтому я мог бы выяснить, почему он считает, что он не существует (используете ли вы относительный путь или некоторую переменную окружения, потому что cron имеет тенденцию работать в очищенной среде).

0

По вопросам рекламы [email protected]