在crontab中执行php

时间:2015-05-18 11:31:12

标签: ubuntu cron server

我有一个usr / local / bin / test.sh文件:

#!/bin/bash
rm -f /tmp/stat/top-1m.csv.zip
wget -P /tmp/stat/ http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
rm -f /tmp/stat/top-1m.csv
unzip -d /tmp/stat/ /tmp/stat/top-1m.csv.zip
php test.php /tmp/stat/top-1m.csv

我尝试使用crontab在服务器上运行它。 / etc / crontab中的代码:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/tmp/stat
MAILTO=root
HOME=/

25 12 * * * root /usr/local/bin/test.sh

.zipped文件被下载并解压缩(非常慢,但它完成了)。我的test.php文件应该从文件中收集数据并将其插入到mysql数据库中。测试。 如果我在终端中执行test.sh,一切都很好。但是没有任何东西通过cron作业写入数据库。为什么是这样?我甚至不知道它是否开始ezecuting test.php。

帮助?

3 个答案:

答案 0 :(得分:1)

你应该在test.sh

中使用test.php的绝对路径

答案 1 :(得分:1)

cron中的PATH变量不是您登录时获得的变量。足够简单:cron不会记录您(也没有任何其他用户)。

同样地,您在登录时有一个当前目录,并不是所有可能与root用户的cron作业相同的目录。

最简单,最强大的解决方案是在所有命令前面添加完整路径,例如php,unzip,wget ...... 并转到您需要的目录。

要确定在登录时执行命令时使用的路径,请使用"":

所以例如:

$ which php
/weird/place/php

意味着您将行php test.php /tmp/stat/top-1m.csv替换为/weird/place/php test.php /tmp/stat/top-1m.csv,同样,也将该位置添加到脚本test.php中。所以你最终得到像/weird/place/php /home/user/subdir/test.php /tmp/stat/top-1m.csv

这样的东西

通常,设置unix系统将cronjobs的输出通过电子邮件发送给拥有crontab的用户。从它的外观可能是你的根本。检查该电子邮件并尝试将其发送给您,以便您可以查看这些错误并根据需要对其进行响应。

答案 2 :(得分:1)

当运行crontab时,它总是推荐为执行程序提供完整路径,例如

composer install --no-dev

而不是

/usr/bin/php ...

并且

php ...

您还应该检查您的cron用户是否有权访问该文件。