Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera,
To tentando executar um shell script utilizando o php, onde basicamente o shell faz o dump de um banco e importa para outro. O problema é que quando eu executo o shell pelo php o retorno que eu tenho é de que tudo foi executado perfeitamente, mas quando eu vou verificar no banco nada foi importado. Fiz um teste onde eu executei o shell pelo terminal e tudo ocorreu bem (o dump foi feito e a importação também).
Que diabos pode estar acontecendo que ao executar o shell com php a importação não funciona e pelo terminal funciona?
Lembrando que já fiz todos os testes que se pode imaginar, já criei um shell teste e executei pelo php e deu certo, já mudei as permissões das pastas e grupo etc.
Agradeço a ajuda desde já.
Cara, já alterei de todas as formas possíveis o usuário/grupo do arquivo, já alterei no httpd.conf e nada adianta. Não sei se estou fazendo a alteração errada... Foda que to a uns 3 dias tentando resolver isso, então estou meio cego, por isso to aqui no fórum.
Você pensa em mais alguma solução?
Não é o arquivo. Eu acho que é o banco.
Como está o seu shell ?
Todas as funções estão sendo executadas, pois no retorno da execução todos os conteúdos do echo é retornado, porém, a importação que eu faço na função import não está sendo executada.
Resumindo, o retorno mostra que a importação foi executada mas quando eu olho no banco nada foi alterado.
#!/bin/bash
echo "Atualização do Banco de dados do Cliente"
index() {
backup_dir="/var/www/html/pasta-cliente/app/database/backup"
date=$(date +"%Y-%m-%d_%H-%M-%S")
file_loc=$backup_dir/export-loc-$date.sql
file_ven=$backup_dir/export-venda-$date.sql
created_at=$(date +"%c")
echo "Data de inicio: $created_at"
}
backup() {
host="ip-do-cliente"
user="root"
password="root"
log_dir="/var/www/html/pasta-cliente/app/storage/logs"
mysqldump --host=$host -u $user -p$password -c -t -e --replace --default-character-set=utf8 --hex-blob=TRUE tabela1 > $file_loc
mysqldump --host=$host -u $user -p$password -c -t -e --replace --default-character-set=utf8 --hex-blob=TRUE tabela2 > $file_ven
if [ $? -eq 0 ] ; then
closed_at=$(date +"%c")
echo "--------------------------------------------------------"
echo "Backup realizado com sucesso !"
echo "Data de término: $closed_at"
echo "Log gerado em: \"$log_dir/backup_mysql.log\""
echo "--------------------------------------------------------"
echo "Backup realizado com sucesso !" >> $log_dir/backup_mysql.log
echo "Usuário: $USER" >> $log_dir/backup_mysql.log
echo "Início: $created_at" >> $log_dir/backup_mysql.log
echo "Fim: $closed_at" >> $log_dir/backup_mysql.log
echo "----------------------------------------" >> $log_dir/backup_mysql.log
else
echo "Erro ao fazer backup do dia: $created_at" >> $log_dir/backup_mysql.log
echo "----------------------------------------" >> $log_dir/backup_mysql.log
fi
}
generateFileImportLoc() {
backup_dir="/var/www/html/pasta-cliente/app/database/backup"
date=$(date +"%Y-%m-%d_%H-%M-%S")
file_import_loc=$backup_dir/import-loc-$date.sql
> $file_import_loc
echo "SET FOREIGN_KEY_CHECKS=0;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab1\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab2\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab3\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab4\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab5\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab6\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab7\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab8\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab9\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab10\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab11\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab12\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab13\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab14\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab15\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab16\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab17\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab18\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab19\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab20\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab21\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab22\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab23\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab24\`;" >> $file_import_loc
echo "TRUNCATE \`wp_tabela\`.\`tab25\`;" >> $file_import_loc
echo "Arquivo de importação da tabela de Locação gerado com sucesso !"
}
generateFileImportVenda() {
backup_dir="/var/www/html/pasta-cliente/app/database/backup"
date=$(date +"%Y-%m-%d_%H-%M-%S")
file_import_ven=$backup_dir/import-vendas-$date.sql
> $file_import_ven
echo "SET FOREIGN_KEY_CHECKS=0;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab1_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab2_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab3_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab4_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab5_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab6_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab7_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab8_ven\`;" >> $file_import_ven
echo "TRUNCATE \`wp_tabela\`.\`tab9_ven\`;" >> $file_import_ven
echo "Arquivo de importação da tabela de Vendas gerado com sucesso !"
}
import() {
mysql --host=127.0.0.1 --user=root -proot --port=3306 --default-character-set=utf8 --comments --database=wp_tabela < $file_import_loc
mysql --host=127.0.0.1 --user=root -proot --port=3306 --default-character-set=utf8 --comments --database=wp_tabela < $file_loc
echo "--------------------------------------------------------"
echo "Importação da tabela Locação realizada com sucesso!"
mysql --host=127.0.0.1 --user=root -proot --port=3306 --default-character-set=utf8 --comments --database=wp_tabela < $file_import_ven
mysql --host=127.0.0.1 --user=root -proot --port=3306 --default-character-set=utf8 --comments --database=wp_tabela < $file_ven
echo "Importação da tabela Vendas realizada com sucesso!"
}
index
backup
generateFileImportLoc
generateFileImportVenda
import
exit
Ta.. se vc executar esse shell na mão ele roda ?
faz um
$ su www-datapara "ser" o usuário do php, e tente executar novamente o shell (pelo command line, e não pelo php).
Para ter certeza de que vc mudou de usuário
$ whoami && echo $HOME;
Se eu executar o shell na mão ele roda.
Fiz o que você falou, porém, ao tentar mudar pro usuário www-data não consigo pois o mesmo não existe.
obs: estou logado na máquina do servidor via ssh como root.
ta.. qual usuário o seu php/apache usa ? nobody ?
ps aux | egrep '(apache2|httpd)'provavelmente vai aparecer ai, ai vc "usa ele" para ver se consegue executar o shell.
Nas configurações do apache, está configurado para que seja utilizada o usuário apache (user/group). Tentei logar como apache mas me foi retornado que esta conta não está disponível.
Desculpe se estou sendo leigo, mas ainda não tenho muito conhecimento com usuários e grupos no linux :/
Hum.. você tentou logar no ssh como apache ?
Tipo, loga como root e usa o comando su para trocar de usuário:
$ su apachecreio que isso já basta.
No retorno do egrep que eu postei, foi "apache" mesmo que apareceu como o usuário ?
Eu já loguei como root e usei exatamente esse comando que você sugeriu, porém, ao executá-lo me retorna que esta conta não está disponível.
Foi sim, é tanto que nas configurações do apache o usuário/grupo configurados é o apache.
-- EDIT
Acabei de criar um usuário no grupo apache e tentei executar o arquivo via linha de comando e o resultado foi ok.
E o php continua com problemas para executar o shell ?
Sim...
Eu executava o shell via php dando um post (AJAX), mas pra facilitar meu debug estou fazendo a requisição utilizando GET. Mesmo assim, ao executar o shell via PHP a importação ainda não funciona.
Verifiquei as permissões do usuário do banco que eu quero importar as informações mas está ALL.
Mais alguma sugestão?
Como não tinha mais tempo para tentar resolver o problema, tive que encontrar uma outra solução. Troquei a execução do shell pelo php por um dínamo utilizando cronjob.
Não ficou do jeito que eu queria, mas deu pra resolver. Espero ter tempo para tentar descobrir na real o que estava acontecendo.
William, obrigado pelo apoio!
Pode ser o usuário. Talvez o usuário que o php usa (apache), não tem permissão para executar o shell de importação do banco.