php - 使用 cron : Could not open logfile, 运行 php 脚本这样的文件或目录

标签 php linux cron

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

对于完成的每个操作(添加一个 torrent、完成一个 torrent、开始文件传输、完成文件传输以及删除文件),一个条目将写入我的 logfile.log ,与所有脚本位于同一目录中,“/home/pi/dev/”。在该文件夹中,我有一个子文件夹 logs,用于保存从 pi 到外部驱动器的所有移动的日志文件。这些日志文件都以被移动的文件夹/文件命名。

正如我所说,torrentfinished.php每 10 分钟通过 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 重命名为其他名称,但我仍然遇到同样的错误。

我不知道该怎么做,所以如果你们有任何想法,请告诉我!

最佳答案

当你使用它时:

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

你留在/home/pi/dev/目录。日志文件写在/home/pi/dev/logs

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

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

关于php - 使用 cron : Could not open logfile, 运行 php 脚本这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26274466/

相关文章:

javascript - 如何在下面的代码中传递文本区域数据?

php - 如何使用 php 从 mysql 中的表中获取多行...

php - 使用 ajax 处理长时间的服务器端操作?

linux - 在 GNU 并行中连接目录和文件名

linux - 边缘触发的 epoll 和 UDP 的 recvfrom()

dependency-injection - 使用调度程序时 Laravel 5 "Class does not exist"

php - Symfony 2 BlueImp OneupUploaderBundle sql 错误 PostPersistEvent 不工作

java - 如何在 ant 文件中对 ipv6 地址执行 scp

python - 如何确保一个脚本只在另一个脚本之后运行

shell - 如何在Kubernetes中使用Cron Job运行具有ssh命令的Shell脚本