1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ficheiro Bash

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por Armadillo, 29 de Outubro de 2007. (Respostas: 24; Visualizações: 2519)

  1. Armadillo

    Armadillo Folding Member

    Boas.
    Sendo eu um novato em linux, peco-vos ajuda.

    Entao eh o seguinte, preciso de criar um bash que me permita fazer as seguintes coisas:
    1. verificar se um "mount" existe
    2. executar um php (o wget serve?)

    Se me puderem indicar informacoes, agradeco.

    Obrigado.
     
  2. lothar_m

    lothar_m Power Member


    desculpa la mas nao percebi mt bem.... o q queres dizer com executar um php?
     
  3. Armadillo

    Armadillo Folding Member

    Tenho que correr diariamente um script em php e pensei em fazer um bash para o cron o correr.
     
  4. lothar_m

    lothar_m Power Member

    relativamente a este ponto ve na man page do mount

    o comando poderá ser algo do género
    Código:
        mount [-l] [-t type]
    
    lists all mounted file systems (of type type). The option -l adds the (ext2, ext3 and XFS) labels in this listing.
     
  5. Armadillo

    Armadillo Folding Member

    e consigo enviar o resultado desse comando para uma variavel no bash?
     
  6. AliFromCairo

    AliFromCairo Power Member

    Boas, dá uma vista de olhos aqui para teres uma ideia de como executar o php.
     
  7. Armadillo

    Armadillo Folding Member

    Basicamente o que eu preciso eh q quando o php va correr/executar, este mount tem q existir. Se ao fazer de novo o mount e n crashar o bash, tudo bem...
    espero ter sido explicito.
     
  8. spastikman

    spastikman Banido

    para executares scripts php, basta que tenhas o cliente de php instalado na consola.

    para enviar para uma variavel o resultado de um comando basta colocar esse comando dentro de acentos graves :

    Ex:
    T=`uname -a`

    echo $T
     
  9. Armadillo

    Armadillo Folding Member

    em relacao ao ficheiro bash em si, tem de ter alguma extensao em concreto ou eh sempre a andar, independentemente da extensao??
     
  10. nasic

    nasic Power Member

    deve ter q ser ficheiro.sh
     
  11. madskaddie

    madskaddie Power Member

    Em lado algum tem que existir uma extensão no nome dos ficheiros. O que acontece é que por facilidade de implementação adoptou-se a extensão para visualmente marcar a diferença nos tipos de ficheiros! Grande parte dos sistemas de gestão de ficheiros também a utiliza para detectar de forma automatica o tipo de ficheiro. Os scripts bash não saão diferentes. Para correres um script tens 2 opções
    • "$sh nomedoficheiro" ou
    • permissão no ficheiro para executar e na primeira linha do ficheiro metes: "#!/bin/sh". Depois corres o ficheiro: "$./nomedoficheiro".
    Onde escrevi "sh", podes por bash, pois no linux, em geral, o comando "sh" é um link para "bash".

    Espero que tenha sido esclarecedor. Já agora, não faz muito sentido chamar um script bash para correr outro script; mais vale no cabecalho por "#!/bin/interpretador_de_php" e fazer do segundo modo que disse. Aquilo que se faz na bash de forma fácil faz-se no php de alguma forma; Aquio que se faz no php também se há de fazer na bash; tudo depende das "bibliotecas" que uses no php, que pode tornar a coisa mais fácil ou dificil. Só vejo algum sentido em usar a bash com o php se forem duas ou mais tarefas complicadas que sejam significativamente mais simples de implementar numa ou noutra.
     
    Última edição: 29 de Outubro de 2007
  12. Armadillo

    Armadillo Folding Member

    eu sei q o meu servidor tem o php instalado na consola.

    desculpem-me a ignorancia, mas basta chamar a url na linha de comando?
    Um exemplo seria esclarecedor.

    Obrigado
     
    Última edição: 29 de Outubro de 2007
  13. madskaddie

    madskaddie Power Member

    Não.

    Chegas à linha de comandos e escreves: php nomedoficheiro.php


    Se não encontrar o comando php, então nada feito! Há máquinas que têm o php instalado no webserver mas que não têm instalado a interface de linha de comandos.
     
  14. Condez

    Condez [email protected] Member

    Podes testar se um mount existe através do seu exit status.

    Sempre que executas um comando, se fizeres "echo $?" imediatamente após a execução desse comando, é devolvido o seu exit status.

    Nas páginas "man" do comando, custuma vir especificado que exit status é devolvido mediante o resultado da acção, ou seja, quando executares um comando de mount, se o mount já existir é devolvido um exit status, caso não exista é devolvido outro, caso dê erro ao montar, devolve outro e por ai fora.

    Testa com um "if" (por exemplo) o exit status de um comando para perceberes se correu tudo bem ou não.
     
  15. slack_guy

    slack_guy Power Member

    No teu script PHP verificas se o que precisas está montado. Não precisas de [ba|c|z|tc|k]sh para isso.

    Para saberes o que está montado a qualquer momento, lês o ficheiro '/etc/mtab'. Se sabes de PHP o suficiente para lidar com ficheiros e expressões regulares não vais ter puto de problema.

    EDIT:
    se o que pretendes é ter um script na crontab para:
    1. Verificar se um determinado dispositivo está montado no sistema
    2 . Se estiver montado, executa um script PHP num servidor Web (local ou remoto)

    sugiro o seguinte secript Perl:
    Código:
    #!/usr/bin/perl 
    use strict;
    use warnings;
    use IO::File;
    
    my $fh = new IO::File "/etc/mtab", "r";
    my $check_mounted = '/dev/sda4'; # define aqui o dispositivo que queres verificar
    
    chomp(my @mounted = <$fh>); undef $fh;
    
    if (grep {$_ =~/$check_mounted/ } @mounted) {
        # Se precisares do output do script PHP...
        print qx|/usr/bin/lynx --dump http://www.example.com/myscript.php|;
       
        # Se não precisas do output do script PHP, comenta a linha anterior e descomenta a seguinte
        #print qx|/usr/bin/lynx --dump http://www.example.com/myscript.php 1>/dev/null|;
    }
    
     
    Última edição: 29 de Outubro de 2007
  16. Armadillo

    Armadillo Folding Member

    basicamente, o q eu quero q o meu bash faça eh isto

    Código:
    #montar repositorio de dados
    mount -t smbfs -o username=consumer,password=xpto //10.18.0.2/path /mnt/path
    
    #executar autoexec.php
    php autoexec.php
    
    
    Ja testei no damSmallLinux executar varias vezes seguidas o mount de uma pasta e n deu erro nenhum.

    Acham q funciona isto sempre, a correr uma vez por dia? o mount nao vai provocar um crash no bash?

    por favor, sou um gaijo q conhece mto pouco lamp...
    preciso da coisa mto simples.

    Agradeço muito a ajuda de todos.
     
    Última edição: 29 de Outubro de 2007
  17. slack_guy

    slack_guy Power Member

    Mostra lá a 1ª linha do teu script PHP, sff.
     
  18. Armadillo

    Armadillo Folding Member

    para q queres ver a 1ª linha do php?
    o php n e chamado pra aqui...

    so quero montar uma partilha e executar/correr um ficheiro php...
     
    Última edição: 29 de Outubro de 2007
  19. slack_guy

    slack_guy Power Member

    Se o comando "$ php autoexec.php" é executado sem erros e consegues montar o sistema não percebo qual é o teu problema.

    Tens dúvidas se vai funcionar sempre??!
     
  20. Armadillo

    Armadillo Folding Member

    Exactamente, pq isto e pra correr em varias maquinas e provavelmente vao ter versoes diferentes de linux. o que eu me pergunto eh se o bash funciona sem crashar (porque vai montar a partilha todos os dias) no ubunto, redhat, ipbrick, etc?

    Nao vou por um bash a testar em servidores de producao sem ter a certeza, ou pelo menos sem a opiniao de outras pessoas que têm muita mais experiencia em linux do que eu.

    Obrigado.
     

Partilhar esta Página