2013-08-27 218 views
0

我试图做一个“通用”的方式来设置cron作业,因为我正在制作一个商业系统,它需要为大家工作。使用php来设置cron作业

这是我在做什么:

<?php 
$data = '0 0,12 * * * -q /public_html/currency.php '; 
file_put_contents('cron.txt', $data, FILE_APPEND); 
exec('sudo crontab cron.txt', $output, $return); 
if($return === 0) 
{ 
    echo 'Cron Successful'; 
    } else { 
    echo 'Cron Unsuccessful' . $output; 
} 
?> 

而且我得到一个错误:克朗UnsuccessfulArray

为什么会出现这个错误? cron.txt包含所有写在$data中的所有内容。

+2

做一个'print_r($ output)'来看看它返回的实际消息 –

+0

这个实际消息是'Array()' –

+0

啊,那么没有(常规)输出。看看你的命令 - “sudo”会指望你输入密码,不是吗?你不得不把这个插进去。(这不是一个非常好的做法,但我认为你知道) –

回答

0

$output变量作为一个PHP数组参考exec功能(http://php.net/manual/en/function.exec.php

施放此数组字符串传递,您可能需要使用像print_rhttp://www.php.net/manual/en/function.print-r.php)函数,如在下面的例子中:

if ($return === 0) { 
    $message = 'Cron Successful'; 
} else { 
    $message = 'Cron Unsuccessful' . print_r($output, true); 
} 

正如在评论中建议,出于安全考虑,不建议留在sudoers中的Web服务器用户。

+0

是的,我已经完全删除它,最终用户只需添加一个cron作业。 –

0

首先你的问题:你没有得到你想要的结果,因为你实际上执行这个PHP代码的用户没有(也非常幸运)具有sudo访问权限。要“解决”这个问题,打开你的shell,而不是运行一个简单的:php example.php,运行这个:sudo php example.php。这应该使它工作。

但是,我强烈建议您重新考虑您尝试解决的问题。我看到你尽可能地自动化(好东西),也许可以使用shell脚本来设置你的环境。您甚至可以将该shell脚本存储在您的git/svn存储库中。

+0

我试图在安装系统时为最终用户解除麻烦,但我决定附上一篇教程,指导如何添加一个cronjob,并将所有cron作业全部拖放到一个文件中,以使其更容易。我远离shell脚本,因此在将来的更新中,我会重新考虑这一点。目前,用户将不得不经历自己添加1个cron任务的麻烦。 –