执行在Cron上运行的PHP脚本的问题

时间:2011-09-22 15:48:07

标签: php cron

我正在尝试在第三方托管服务器上的cron上运行一个非常简单的PHP脚本,我遇到了一个奇怪的问题。虽然我确认cron确实在预定的时间执行脚本,但脚本的内容未执行。我无法检查Cron设置,因为它不在我的服务器上,但我想知道我做错了什么?

该脚本仅用于测试目的,因此非常简单:

<?php
$file = fopen("file-" . rand(1000, 9999) . '.txt', 'w');
fwrite($file, 'cron');
fclose($file);
?>

当我手动运行此脚本时,将创建该文件。当我把它放在Cron上时,没有任何反应。可能是什么原因?脚本的权限是777.我做错了什么或是服务器上的问题?

非常感谢。

2 个答案:

答案 0 :(得分:1)

请记住,在cron下运行的脚本与在命令行上手动运行的相同脚本的环境完全不同。特别是,cron将具有与shell提示不同的工作目录。您没有为文件指定绝对路径,因此当cron运行脚本时,它将尝试在当时CWD的任何目录中创建该文件。如果运行此作业的用户标识对该目录没有写入权限(或该文件存在但由其他人拥有),则fopen将失败。

永远不要假设文件操作成功。始终检查错误情况。当你在它时,指定文件的绝对路径,所以你知道它将写在哪里:

$filename = "/path/to/where/you/wantfile-" . rand(1000,9999) . '.txt';
$file = fopen($filename, 'w') or die("Unable to open $filename for output");

答案 1 :(得分:0)

这可能是因为脚本是以apache之外的某些用户身份运行的。在某些情况下,我将使用curl并检查脚本以查看IP是否是本地IP以确保它是从正确的机器运行。实现这一点的方法肯定不那么简单,但这总是一个快速而简单的方法。