alterar usuario e continuar a executar o shell script

1. alterar usuario e continuar a executar o shell script

Matheus Resende Faria
teteuvec

(usa Ubuntu)

Enviado em 10/08/2014 - 22:55h

Bom dia Senhores;

Estou tendo problemas para executar a função shell_exec no php para o script abaixo. A idéia é o script criar um banco de dados no posgresql com nome vindo do parâmetro do shell_exec $new_dbname; logar o user postgres; trazer as informações do database origin.dbo (localizado no /~ do user postgres) para o $new_dbname; alterar o dono do database para linked e finalmente deslogar do postgres.
O grande problema é que quando é logado o user postgres (linha 3), o script para de ser executado.

Abaixo o shell script.

1 #!/bin/bash
2 sudo -H -u postgres bash -c 'createdb -T template0 $new_dbname
3 sudo su postgres
4 psql $new_dbname < origin.dbo
5 psql
6 ALTER DATABASE novo3 OWNER TO linked
7 \g
8 \q
9 exit


  


2. Re: alterar usuario e continuar a executar o shell script

Paulo
paulo1205

(usa Ubuntu)

Enviado em 12/08/2014 - 11:31h

A linha 2 já executa com o mesmo usuário que você quer que execute os comandos da linha 4 em diante, certo? Então você pode fazer tudo numa chamada só.

#!/bin/bash
sudo -H -u postgres bash -c "
createdb -T template0 $new_dbname
psql $new_dbname < origin.dbo
psql <<EOF
ALTER DATABASE novo3 OWNER TO linked
\g
\q
EOF
"


Ou, então, de outra forma.

#!/bin/bash
sudo -H -u postgres bash <<EOF
createdb -T template0 "$new_dbname"
psql "$new_dbname < origin.dbo"
psql <<EOI
ALTER DATABASE novo3 OWNER TO linked
\g
\q
EOI
EOF



3. Re: alterar usuario e continuar a executar o shell script

Matheus Resende Faria
teteuvec

(usa Ubuntu)

Enviado em 24/08/2014 - 16:00h

Quase funcionou perfeito Paulo!

o script abaixo funcionou

#!/bin/bash
sudo -H -u postgres bash <<EOF
createdb -T template0 $new_dbname
psql $new_dbname < origin.dbo
psql <<EOI
ALTER DATABASE $new_dbname OWNER TO linked
\g
\q
EOI
EOF
EXIT


O problema é que a linha 4 não está fazendo a restauração completa do DB pelo fato de não estar logado no postgres. acontece o seguinte erro:

invalid command \':ri&#65533;&#65533;&#65533;s.&#728;Z&#65533;&#65533;&#65533;&#65533;.&#65533;&#65533;B&#65533;&#65533;&#65533;&#65533;&#1452;&#65533;&#65533;&#65533;6&#65533;&#65533;q&#65533;s&#65533;&#65533;7?-k&#65533;&#65533;,,&#65533;&#65533;)&#65533;&#65533;ee
invalid command \]&#65533;&#65533;&#65533;=&#65533;&#65533;&#65533;&#65533;
invalid command \&#65533;&#152;I&#65533;2&#65533;&#65533;j&#65533;y&#65533;&#65533;Y>&#65533;A
invalid command \&#65533;(M&#35773;&#65533;&#65533;&#65533;&#65533;$av2&#65533;&#65533;l9t&#65533;&#65533;&#65533;&#65533;&#65533;b&#65533;J&#65533;&#65533;&#65533;*
invalid command \x=
invalid command \&#1516;m&#65533;h
invalid command \&#65533;&#65533;H&#65533;&#65533;^&#65533;&#65533;[1&#65533;&#65533;&#65533;&#65533;+&#65533;&#65533;!j#&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;t&#65533;4&#65533;&#65533;&#65533;&#65533;&#65533;bv&#65533;V;<h&&#65533;&#65533;&#65533;&#65533;$&#2024;
invalid command \&#65533;_h&#65533;dq&#65533;&#65533;&#65533;&#65533;&&#65533;&#65533;!k&#65533;&#65533;&#65533;S:B&#65533;oQpB&#1187;g&#65533;&#65533;&#65533;9&#65533;vY&#65533;x&#65533;&#65533;X&#65533;I>Kpd&#65533;UJ&#65533;&#65533;&#65533;&#65533;t&#65533;&#1419;r}~&#65533;@Y&#65533;&#65533;&#65533;&#65533;&#65533;u&#65533;&#65533;&#65533;&#65533;&#65533;F&#65533;kB&#65533;&#65533;`x&#65533;N&#65533;1&#65533;a[&#65533;BKfY
invalid command \&#65533;!&#65533;&#65533;&#65533;|&#65533;yW&#875;s4&#65533;]|&#65533;_&#65533;&#65533;P&#1479;
invalid command \&#65533;&#65533;}&#65533;&#65533;&#65533;&#65533;&#65533;v0&#65533;E&#65533;j1esD&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;fD&#65533;&#65533;&#517;H&#65533;z&#65533;US
invalid command \&#800;&#65533;/t0P&#65533;&#65533;jF&#65533;&#65533;m"&#65533;tR&#65533;&#65533;&#65533;&#65533;&#1699;&#65533;{B&#65533;&#65533;D&#1641;t&#65533;=&#65533;S&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;^&#65533;
invalid command \Z&#65533;&#65533;&#65533;&#588;"`&#65533;&#65533;q
invalid command \&#65533;D&#65533;&#65533;?h&#65533;&#1423;&#65533;&#65533;{&#65533;/&#65533;&#65533;&#65533;&#704;X&#65533;!&#65533;:p.&#65533;&#65533;&#1166;HK'&#65533;
invalid command \-&#65533;&#65533;L2&#65533;&#65533;&#65533;&#65533;&#65533;]g&#65533;_G&#65533;&#65533;$&#65533;7&#65533;w@
invalid command \&#65533;&#65533;:&#65533;{H&#65533;&#65533;r~&#65533;D6rU1&#65533;mQy&#65533;X&#65533;&#65533;0
invalid command \&#65533;&#1135;&#65533;&#65533;B&#65533;&#65533;4&F&#65533;
ERROR: invalid byte sequence for encoding "UTF8": 0xa5
ALTER DATABASE
x@x-Inspiron-N5110:/opt/lampp/htdocs/linked/operations$


obs: quando logado no usuario postgres e realizando o seguinte comando:
psql $new_dbname < origin.dbo

Ele restaura certinho e funciona redondo!


Pode me ajudar nesse incoveniente?


4. Re: alterar usuario e continuar a executar o shell script

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 24/08/2014 - 17:04h

teteuvec escreveu:

Bom dia Senhores;

Estou tendo problemas para executar a função shell_exec no php para o script abaixo. A idéia é o script criar um banco de dados no posgresql com nome vindo do parâmetro do shell_exec $new_dbname; logar o user postgres; trazer as informações do database origin.dbo (localizado no /~ do user postgres) para o $new_dbname; alterar o dono do database para linked e finalmente deslogar do postgres.
O grande problema é que quando é logado o user postgres (linha 3), o script para de ser executado.

Abaixo o shell script.

1 #!/bin/bash
2 sudo -H -u postgres bash -c 'createdb -T template0 $new_dbname
3 sudo su postgres
4 psql $new_dbname < origin.dbo
5 psql
6 ALTER DATABASE novo3 OWNER TO linked
7 \g
8 \q
9 exit


Altera a linha 3 para

sudo su --login postgress - 

Testa e posta o retorno


5. solução icavalheiro

Matheus Resende Faria
teteuvec

(usa Ubuntu)

Enviado em 24/08/2014 - 19:05h

icavalheiro

*O código com sua requisição ficou assim:

#!/bin/bash
sudo -H -u postgres bash -c createdb -T template0 novo
sudo su --login postgress -
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit


* ERRO Retornado

x@x-Inspiron-N5110:/opt/lampp/htdocs/linked/operations$ ./new_db.shcreatedb: database creation failed: ERROR: database "postgres" already exists
No passwd entry for user 'postgress'
psql: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
./new_db.sh: line 6: ALTER: command not found
./new_db.sh: line 7: g: command not found
./new_db.sh: line 8: q: command not found



6. Re: alterar usuario e continuar a executar o shell script

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 24/08/2014 - 19:08h

teteuvec escreveu:

icavalheiro

*O código com sua requisição ficou assim:

#!/bin/bash
sudo -H -u postgres bash -c createdb -T template0 novo
sudo su --login postgress -
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit


* ERRO Retornado

x@x-Inspiron-N5110:/opt/lampp/htdocs/linked/operations$ ./new_db.shcreatedb: database creation failed: ERROR: database "postgres" already exists
No passwd entry for user 'postgress'
psql: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
./new_db.sh: line 6: ALTER: command not found
./new_db.sh: line 7: g: command not found
./new_db.sh: line 8: q: command not found


Bem, agora o script reclama que não está sendo inserida senha pro usuário postgres. Como só ele é usado no script, faz assim:

#!/bin/bash
# Modo de usar: sudo su --login postgres -c "sh script.sh" -
createdb -T template0 novo
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit


Salve como script.sh e use como a segunda linha, Modo de usar, indica.


7. solução icavalheiro

Matheus Resende Faria
teteuvec

(usa Ubuntu)

Enviado em 24/08/2014 - 19:26h

SCRIPT:
#!/bin/bash
sudo su --login postgres -c sh new_db.sh -
createdb -T template0 novo
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit


ERRO:
x@x-Inspiron-N5110:/opt/lampp/htdocs/linked/operations$ ./new_db.shsh: 0: can't access tty; job control turned off
$ ^C

(APERTEI CTRL+C)

Session terminated, terminating shell...
$ ...killed.
createdb: could not connect to database template1: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
./new_db.sh: line 6: ALTER: command not found
./new_db.sh: line 7: g: command not found
./new_db.sh: line 8: q: command not found



8. Re: alterar usuario e continuar a executar o shell script

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 24/08/2014 - 19:28h

teteuvec escreveu:

SCRIPT:
#!/bin/bash
sudo su --login postgres -c sh new_db.sh -
createdb -T template0 novo
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit


ERRO:
x@x-Inspiron-N5110:/opt/lampp/htdocs/linked/operations$ ./new_db.shsh: 0: can't access tty; job control turned off
$ ^C

(APERTEI CTRL+C)

Session terminated, terminating shell...
$ ...killed.
createdb: could not connect to database template1: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
./new_db.sh: line 6: ALTER: command not found
./new_db.sh: line 7: g: command not found
./new_db.sh: line 8: q: command not found


Compara o script que eu te passei
#!/bin/bash
# Modo de usar: sudo su --login postgres -c "sh script.sh" -
createdb -T template0 novo
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit

com o que você usou
#!/bin/bash
sudo su --login postgres -c sh new_db.sh -
createdb -T template0 novo
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit

Não tá notando nada diferente não?


9. solução icavalheiro

Matheus Resende Faria
teteuvec

(usa Ubuntu)

Enviado em 24/08/2014 - 19:33h

Sim está!
agora consertando ...


SCRIPT:
#!/bin/bash
sudo su --login postgres -c "sh new_db.sh" -
createdb -T template0 novo
psql novo < origin.dump
psql
ALTER DATABASE novo OWNER TO linked
\g
\q
exit


ERRO:
x@x-Inspiron-N5110:/opt/lampp/htdocs/linked/operations$ ./new_db.shsh: 0: Can't open new_db.sh
createdb: could not connect to database template1: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
psql: FATAL: role "x" does not exist
./new_db.sh: line 6: ALTER: command not found
./new_db.sh: line 7: g: command not found
./new_db.sh: line 8: q: command not found






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts