Como executar um script de shell bash através de um link do navegador

1

Eu escrevi um script bash que periodicamente verifica um diretório para arquivos .ear recém-adicionados e os copia para o diretório deploy do respectivo servidor JBoss.Antes de copiar, ele verifica se o JBoss está em execução e o interrompe, se for.Depois de copiar o arquivo, ele remove os arquivos .ear mais antigos, se houver, e inicia o JBoss.
Eu estou tentando ter esse script executado através de uma página da web. Ou seja, fornecer um link para os usuários, clicando em qual, todo o processo é executado. Até agora eu não sou capaz de obter o resultado desejado, embora manualmente a execução funcione.
Estou recebendo o seguinte erro nos registros http:

warn] [client 127.0.0.1] Tempo limite aguardando saída do script CGI /var/www/cgi-bin/auto.sh, referenciador: link

Agradeceria se alguém pudesse lançar alguma luz sobre como fazê-lo.

    
por DiogoSaraiva 08.02.2010 / 15:34

2 respostas

2

  1. O script CGI será executado com o ID do usuário do servidor da Web, que pode não ser o ID do usuário da pessoa que o testou. Você já considerou isso?

  2. O script CGI precisa imprimir um cabeçalho e alguma saída como "Sucesso, obrigado por usar o auto.sh".

 echo "Content-type: text/plain"
 echo 
 echo "Success, thanks for using auto.sh"

Se for muito desajeitado tentar fazer CGI a partir do shell, coloque-o em um pouco de perl ou python que tenha bibliotecas para lidar com CGI.

Uma abordagem alternativa seria deixar um token em um arquivo ou coluna do banco de dados que instrui a execução, e depois ativá-lo no cron ou executá-lo constantemente e procurar o token.

Além disso, dependendo de como o servidor da Web está configurado, seu CGI demora muito para ser executado antes de expirar ...

    
por 08.02.2010 / 15:39
0

Obrigado uma tonelada, ~ drpaulbrewer e outros.Era certamente uma questão de permissão.Have conseguiu fazê-lo funcionar, dando as permissões necessárias para o apache no arquivo sudoers.Também está recebendo um '[erro] [cliente 127.0.0.1] padrão deve ser um erro tty, referer: link 'nos logs, dos quais eu me livrei excluindo o apache da seção' Defaults requiretty 'no arquivo sudoers.

Embora eu tenha pensado inicialmente em executar o script como um cronjob, ele não foi implementado, já que estamos executando isso em um ambiente de teste e temos várias instâncias do JBoss em execução simultaneamente. Pensamos que seria melhor deixar os usuários acionar o script manualmente, daí esta abordagem.

Obrigado novamente. Nagaraj

    
por 09.02.2010 / 08:14