PHP脚本不在Ubuntu Server上作为cron作业运行

时间:2016-06-03 07:44:18

标签: php ubuntu cron crontab

我编写了一个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命令

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

2 个答案:

答案 0 :(得分:1)

正如评论中所见,问题出现在脚本中的路径中:您想使用/var/www/cmdb/backup并且只是写了backup,因为您认为它很好,因为脚本在同一目录中运行

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

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

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

答案 1 :(得分:0)

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

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

你能尝试明确php的位置吗?

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