Crontab运行问题

时间:2013-05-13 11:47:48

标签: linux cron crontab

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

当我为每个php文件制作一个crontab时,它工作正常。像这样的命令:

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

但是当我想运行一个包含我所有的php文件的shell脚本时:

* * * * * 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 个答案:

答案 0 :(得分:2)

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

所以暂时用#!/bin/sh替换#!/bin/sh -vx 并添加

  pwd

在脚本的开头(即第二行)

然后可能添加一个

 cd /home/username/public_html/codes

或者可以定义变量并使用它:

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

等...

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

答案 1 :(得分: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
.
.
.