如何从 bash 文件执行 php 文件?

如何从 bash 文件执行 php 文件?

我的目标是编写一个可以通过 cron 作业执行的脚本。

该脚本需要在多个目录中找到多个killstat.php文件并执行。

这是我目前所拥有的:

#!/bin/bash
NAMETOFIND=$(find /home/ -name "killstat.php")
for i in $NAMETOFIND; do /usr/bin/php -f $i;
done

应该执行 killstat.php 来重置我的统计数据。但似乎 php 文件未执行。当我将 -f 开关更改为 -l(语法错误检查)时,脚本执行正常!

php killstat.php从 CLI 执行也很好,并重置了统计信息。我以 root 身份运行,并且 killstat.php 和我的脚本都归 root 所有。脚本的 chmod 为 4755

Hastur 提供了略加改动的解决方案。

我将此脚本放在 /etc/cron.monthly 中以重置我的统计数据。

#!/bin/bash
find /home -name "killstat.php"  | while read i
do
  Cdir=$(dirname "$i")
  Cname=$(basename "$i")     # This line can be avoided..
  cd "$Cdir"
  /usr/bin/php -f "$Cname";  # ...if here you use killstat.php [1]
  cd -
done

答案1

path如果找到的文件中含有空格,则可能会出现问题。
尝试使用while read do ... done如下循环:

#!/bin/bash
find /home/ -name "killstat.php"  | while read i
do 
  /usr/bin/php -f "$i";
done

注意双引号/usr/bin/php -f "$i";


如果你的脚本需要从他的住处

#!/bin/bash
find /home/ -name "killstat.php"  | while read i
do 
  Cdir=$(dirname "$i")
  Cname=$(basename "$i")     # This line can be avoided...
  cd "$Cdir"
  /usr/bin/php -f "$Cname";  # ...if here you use killstat.php [1]
  cd -
done

再次注意双引号,以防$i目录字符串中有空格。
实际上不需要双引号,$Cname因为您知道在本例中是killstat.php
[1] 您可以直接替换killstat.php$Cname并避免在脚本中写入所有包含 Cname 的行。

相关内容