2013-05-13 79 views
0

我有500个PHP文件,我想打一个crontab自动运行他们(它们存储在我的数据库中的XML数据),我的问题是:crontab的运行问题

当我做一个crontab每个PHP文件,它工作正常。像这样的命令:

* * * * * php /home/username/public_html/codes/php0.php 

但是当我要运行一个shell脚本,包括我所有的PHP文件是这样的:

* * * * * bash /home/username/public_html/codes/php.sh 

它不运行。

php.sh:

#!/bin/sh 

php php0.php 
echo php0 
php php1.php 
echo php1 
php php2.php 
echo php2 
. 
. 
. 

是否有可能缠上bash脚本PHP文件?如果是的话为什么不工作我想念什么?

回答

2

您可能未在您认为自己的目录中运行。

因此,与#!/bin/sh -vx 暂时#!/bin/sh更换,并在你的脚本的开头添加

pwd 

(即2号线)

那么也许添加

cd /home/username/public_html/codes 

或者可能定义一个变量并使用它:

mycodedir=/home/username/public_html/codes 
php $mycodedir/php0.php 
echo php0 

等等

我建议阅读advanced bash scripting guide(即使它有弱点)。

+0

对不起,我不知道任何关于Linux命令,所以请问什么是pwd,在哪里添加它? – 2013-05-13 11:55:07

0

目前,您在php.sh中有相对路径。下面一行

php php0.php 

意味着php将寻找php0.php文件在当前工作目录。在cron作业中,工作目录通常是/,即文件系统根目录。要检查工作目录是什么,可以使用pwd命令。

因此,您的php.sh脚本在您的文件系统根目录中查找文件php0.php,但文件位于/home/username/public_html/codes/

如果在您的php.sh中使用绝对路径,当前工作目录无关紧要。因此,只需在您的php.sh中添加绝对路径。该文件将看起来像这样:

#!/bin/sh 

php /home/username/public_html/codes/php0.php 
echo php0 
php /home/username/public_html/codes/php1.php 
echo php1 
php /home/username/public_html/codes/php2.php 
echo php2 
. 
. 
.