【发布时间】: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)在命令行上运行脚本,并且文件创建得很好。