2011-06-15 134 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