我有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文件?如果是,为什么不起作用我会错过什么?
答案 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
.
.
.