用cron运行php脚本:无法打开日志文件,所以这样的文件或目录

时间:2014-10-09 09:06:09

标签: php linux cron crontab

我将Raspberry Pi设置为种子箱。我有一个每10分钟运行一次的cron作业,使用transmission-remote -l检查已完成的文件,grep检查已完成的条目(100%),获取文件夹的名称,将这些文件复制到外部驱动器,然后删除我的Pi上的原始文件。

对于已完成的每个操作(已添加torrent,已完成torrent,已启动文件传输,文件传输已完成且文件已被删除),条目将写入logfile.log,它位于与所有脚本相同的目录中,'/ home / pi / dev /'。在该文件夹中,我有一个子文件夹logs,可以保留从pi到外部驱动器的所有移动的日志文件。这些日志文件都是在移动文件夹/文件后命名的。

正如我所说,每隔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上的位置,不会被传输。此外,没有任何内容写入logfilelogs/$torrentname.log

我一直在抨击我的大脑,并且在更多文件上使用chmod 777而不是可能被认为是必要的也不安全,只是为了确保这不是权限问题。我当然可能错过了一些东西,但我不这么认为。我也尝试将文件logfile重命名为其他内容,但我仍然遇到同样的错误。

我对于该怎么做没有更多的想法,所以如果你们有任何想法,请告诉我们!

2 个答案:

答案 0 :(得分:1)

使用时:

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

你留在/ home / pi / dev /目录。 logfile写在/ home / pi / dev / logs

在cron中运行脚本时,基本目录是另一个(例如,它可能是/ bin或/ usr / bin)。

尝试使用 DIR FILE 常量来设置日志文件路径。

答案 1 :(得分:0)

查看实际的PHP代码可能会有所帮助。我在这里的第一步是让代码打印到logfile的路径,这样我就可以找出它认为它不存在的原因(你是使用相对路径还是某个环境变量,因为cron倾向于运行消毒环境)。