运行一个cronjob作为万维网数据

我的服务器在Ubuntu 14.04和nginx上运行。 我的问题涉及到Cron ,我想用cron.txt文件启动它(crontab),它的内容:

* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log 

如果我使用命令: crontab /var/www/html/cron.txt运行它,它完美的工作,脚本test.php正在执行。 但是,当我这样做,但使用PHP脚本(通过浏览器执行): exec('crontab /var/www/html/cron.txt'); ,它不起作用。

通过命令检查当前的cronjob: crontab -l -u www-data ,出现文件中的行,但是Cron没有完成它的工作。 也许这涉及到一些权限问题? 因为它只能以root身份执行。 有没有办法迫使克朗做www数据的任务呢?

我不清楚你想做什么。 据我所知,你需要执行一个cron作为万维网的数据用户。 通常(强烈推荐)www-data用户无权访问shell。 但是,您可以执行cron任务作为www-data,将您的任务放在root cron中,如下所示:

 * * * * * su www-data -s /bin/bash -c "/usr/bin/php /YOUR_PATH/task.php" 

这也是一种干净的方式,因为您将系统的所有cron作业集中在一个文件中,但每个任务都以所需的用户身份(具有适当的权限和属性)运行。

您可以更改* * * *参数以调整作业的时间安排。 在我的例子中,它每隔一分钟运行一次。

希望能帮助到你。

你想要一些奇怪的东西 为什么从php脚本执行crontab? Crontab是一个基于时间的作业调度程序,它不应该从PHP脚本运行。 如果你想启动cronjob作为万维网数据,你应该使用命令crontab -u www-data -e来configuration它,在这之后你的工作将会在你configuration的时候被执行。

我设法达到了我想要的,在我的初始文章中的代码的一切都是好的,唯一我应该知道的是www数据用户不允许写入/var/log ,所以我没有输出那里。 此外,在我的PHP脚本中,我试图创build一个文件并写入一些内容,所需的绝对path是这样的:

 dirname(__FILE__) . '/myfile.txt'; 

经过这些改变,一切都按预期工作。