我编写了一个php脚本,它创建了一个mysql数据库的备份,并将其设置为每天在Ubuntu服务器上使用crontab运行,但脚本永远不会执行(至少看起来如此)。
在crontab中为root用户调用脚本(sudo crontab -e):
* * * * * php -f /var/www/cmdb/backup.php
(时间需要调整,但这是出于测试目的。)
什么都没发生。没有文件被创建,也没有日志被修改。
但是,以下所有测试都成功:
php backup.php
* * * * * php -v > /var/www/cmdb/backup/php-v.txt
* * * * * php -f /var/www/cmdb/test.php > /var/www/cmdb/backup/text.txt
(将字符串写入文件)我认为这些测试表明:
那么,为什么backup.php在从crontab运行时不做任何事情?
答案 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