2011-06-15 138 views
4

我想在每天16:00更新数据库中的某些内容。无法从crontab执行命令?

因此,我使用crontab执行命令运行我的file.php运行更新。当我在bash中执行命令时,它完美地工作,但是crontab存在问题。

的crontab:

00 16 * * * ./etc/cron.daily/maj_cat 

maj_cat

php var/www/dev/update.php 

谢谢!

+0

你可能缺少'无功/网络加前缀斜线...' – 2011-06-15 16:42:43

+0

什么是root用户的主目录? (或者也许你应该在路径名中输入。)。你在maj_cat上设置了执行位吗?现在最好使用'#!/ bin/sh'这一行。 – LHMathies 2011-06-15 16:43:39

回答

3

./etc/cron.daily/maj_cat是相对路径和var/WWW的/ dev/update.php也尝试:

00 16 * * * /etc/cron.daily/maj_cat 

和maj_cat:

php /var/www/dev/update.php 

要你可以这样做:

00 16 * * * /usr/bin/env php /var/www/dev/update.php 
+0

是的!它运行该脚本,但它更新了100篇文章的数据库中的两篇文章...也许我需要声明运行时间? – user420574 2011-06-15 16:56:54

+0

是的,你可以在CLI中的文件或php.ini中设置:/ etc/php5/cli/php。ini(取决于Linux发行版或bsd等),指令是:max_execution_time,例如:max_execution_time = 3600 //一小时 – Exos 2011-06-15 17:25:26

1

你将要使用的完整路径,PHP,

类型: whereis PHP

通常PHP位于位于/ usr /斌/ PHP

导致: 在/ usr/bin/php /var/www/dev/update.php

我发现测试crontab是通过输出到一个文件来执行的,所以你知道cron实际上正在被执行,如:

在/ usr/bin中/ PHP /var/www/dev/update.php> output.txt的

你可能会好起来把一个正斜杠也正如我上面显示之前的“变种”。

1

可能crondeaemon不使用当你手动完成时设置的PATH变量。 确保php在路径中(在你的crontab的头部)。

否则,您可以尝试在脚本中使用绝对路径。

0

Cron在运行cronjob时会使用默认配置文件,它可能与您登录时使用的PATH变量不同。您可以在cronjob的开头加载自己的配置文件,以确保cronjob的环境匹配您登录的环境。

您可以用这种方式加载配置文件:

00 16 * * * ~/.profile; ./etc/cron.daily/maj_cat