Como executar um arquivo php de um arquivo bash?

1

Meu objetivo é criar um script que possa ser executado por meio de um cron job.

O script precisa encontrar vários arquivos killstat.php em vários diretórios e executá-los.

Isso é o que eu tenho até agora:

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

killstat.php deve ser executado para redefinir minhas estatísticas. Mas parece que o arquivo php não é executado. Quando eu mudo a opção -f para -l (verificação de erro de sintaxe), o script é executado corretamente!

Executar php killstat.php da CLI também funciona bem e redefine as estatísticas. Eu estou correndo como root e também killstat.php e meu script são de propriedade de root. O script é chmod para 4755

Solução fornecida por Hastur com pequena alteração.

Eu coloco este script em /etc/cron.monthly para redefinir minhas estatísticas.

#!/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
    
por Karel 17.05.2014 / 00:08

1 resposta

1

Você deve ter problemas quando tiver espaços no path dos arquivos encontrados.
Tente com um loop while read do ... done como:

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

Observe as aspas duplas " em /usr/bin/php -f "$i";

Caso seu script precise ser executado a partir de lugar dele

#!/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

Anote novamente as aspas duplas para $i apenas no caso de você ter espaços na string do diretório.
O duplo não é realmente necessário para $Cname , pois você sabe que, nesse caso, é killstat.php .
[1] Você pode colocar diretamente killstat.php em vez de $Cname e evitar escrever todas as linhas com Cname no script.

    
por 27.05.2014 / 16:24