【问题标题】:PHP script does not run as cron job on Ubuntu ServerPHP 脚本不能在 Ubuntu 服务器上作为 cron 作业运行
【发布时间】:2016-10-03 04:29:32
【问题描述】:

我编写了一个 php 脚本,用于创建 mysql 数据库的备份,并将其设置为在 Ubuntu 服务器上使用 crontab 每天运行,但该脚本从未执行(至少看起来如此)。

  • 脚本名为backup.php。
  • 它会生成一个备份(gz 存档中的 sql)并将其存储在文件夹 /backup 中。
  • 它会在 /backup/log.txt 中添加几行文本。

在 crontab 中为 root 用户调用脚本,如下所示(sudo crontab -e):

* * * * * php -f /var/www/cmdb/backup.php

(时间需要调整,但这是出于测试目的。)

什么都没有发生。不创建文件,不修改日志。

但是,以下所有测试均成功:

  • 使用php backup.php直接在控制台中运行脚本
  • 运行 cron 作业:* * * * * php -v > /var/www/cmdb/backup/php-v.txt
  • 运行 cron 作业:* * * * * php -f /var/www/cmdb/test.php > /var/www/cmdb/backup/text.txt(将字符串写入文件)

我认为这些测试表明:

  • backup.php 脚本正常工作
  • Cron 正在运行
  • 备份文件夹是可写的
  • 可以从 crontab 访问 PHP 命令

那么,为什么从 crontab 运行时 backup.php 不做任何事情?

【问题讨论】:

  • 嗨,Paul,您的代码中是否有一些输出(echo、print、print_r 等)用于调试目的?当按计划任务启动时,它可能会停止您的代码执行。
  • 你检查过php脚本是否可执行吗?日志在说什么?剧本里有什么?请记住,脚本中的路径必须是完整的,而不是相对的。
  • 没有任何日志记录/错误输出,我们无能为力。一件显而易见的事情是,当从 cron 运行 PHP 脚本时,运行的用户是什么用户?它是否拥有完成工作所需的权限?
  • 你可以 * * * * * php -f /var/www/cmdb/backup.php > /tmp/cronlog 2>&1 并且可能会看到脚本的输出
  • 谢谢大家好的cmets和建议,我都试过了。 @Oli:你对我帮助最大,因为现在我确实得到了一些线索。 “file_put_contents(sql, gz or log) 无法打开流:(...) 中没有这样的文件或目录”。一定是权益问题。我不明白,因为我可以以我想要的任何用户(不仅仅是 root)在命令行上运行脚本,并且文件创建得很好。

标签: php ubuntu cron crontab


【解决方案1】:

从 cmets 中可以看出,问题出在脚本中的路径上:您想使用 /var/www/cmdb/backup,而只是写了 backup,因为您认为它没问题,因为脚本在同一目录中运行。

因此,一般来说,永远不要假设脚本中的路径来自 crontab:cron 在非常有限的环境下运行,其运行路径通常是 /root 或只是 /。因此,无论您在脚本中使用什么,都可以使用完整路径。

或者,否则,移动到路径然后运行脚本:

* * * * * cd /var/www/cmdb/ && php -f backup.php

【讨论】:

    【解决方案2】:

    您可以尝试直接从命令行运行命令来检查输出吗?

    php -f /var/www/cmdb/backup.php

    您可以尝试明确 php 的位置吗?

    * * * * * /usr/bin/php -f /var/www/cmdb/backup.php

    【讨论】:

      最近更新 更多