У меня 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
к чему-то еще, но я все еще получаю ту же ошибку.
У меня больше нет идей о том, что делать, поэтому, если у кого-то из вас есть идеи, пожалуйста, расскажите!
Когда вы используете это:
php -f /home/pi/dev/torrentfinished.php
Вы остаетесь в каталоге / home / pi / dev /. И файл журнала пишется в / home / pi / dev / logs
Когда вы запускаете скрипт в cron, базовый каталог является другим (например, это может быть / bin или / usr / bin).
Попробуй использовать DIR или же ФАЙЛ константы, чтобы установить путь к лог-файлу.
Это может помочь увидеть фактический код PHP. Моим первым шагом здесь было бы напечатать код logfile
поэтому я мог бы выяснить, почему он считает, что он не существует (используете ли вы относительный путь или некоторую переменную окружения, потому что cron имеет тенденцию работать в очищенной среде).