我有一个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。
帮助?
答案 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用户是否有权访问该文件。