Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dorian Neto

Problema ao rodar shell script com php

Recommended Posts

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á.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é o arquivo. Eu acho que é o banco.

 

Como está o seu shell ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta.. se vc executar esse shell na mão ele roda ?

 

faz um

$ su www-data
para "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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum.. você tentou logar no ssh como apache ?

 

Tipo, loga como root e usa o comando su para trocar de usuário:

$ su apache
creio que isso já basta.

No retorno do egrep que eu postei, foi "apache" mesmo que apareceu como o usuário ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o php continua com problemas para executar o shell ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.