Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [bash] cosa c'e' che non va in questo script?

    Praticamente quello che deve fare e' compilare una web app usando ant, una volta ottenuto il war rinominarlo in max.war, copiarlo sul server di sviluppo nella home dell'utente. Poi nel server di sviluppo, via ssh, copiare la versione corrente dell'applicazione in /tmp appendendoci data e ora far in modo che in /tmp ci siano solo le ultime 3 copie di backup e alla fine copiare la nuova versione dalla home dell'utente alla directory webapps di tomcat. Tutto funziona a parte la roba che ho scritto in grassetto. Eppure se copio incollo lo scriptino sul server (da TOTAL= in poi) funziona perfettamente! Cosa cavolo c'e' che non va??

    (per ssh ho scambiato le chiavi quindi la connessione e' password-less)

    codice:
    #!/bin/bash
    
    #deploy.sh
    
    PROJECT_ROOT=".."
    BUILD_XML="./build/build.xml"
    WAR_NAME="./umaps-dev.war"
    DEST_WAR_NAME="./max.war"
    WANTED_BACKUPS=3
    
    cd ${PROJECT_ROOT}
    
    ant -f ${BUILD_XML} clean
    ant -f ${BUILD_XML}
    rm ${DEST_WAR_NAME} > /dev/null
    mv ${WAR_NAME} ${DEST_WAR_NAME}
    scp ${DEST_WAR_NAME} user @ server.di.sviluppo:
    
    date=`date "+%Y%m%d-%H.%M"`
    
    ssh user @ server.di.sviluppo "sudo cp /bin/tomcat-6.0.18/webapps/max.war /tmp/max.war.${date}"
    ssh user @ server.di.sviluppo "TOTAL=\`ls -l /tmp/max.war.*| wc -l\`;for war in \`ls -l /tmp/max.war.* | head -n \$((\$TOTAL-$WANTED_BACKUPS)) | tail -n \$((\$TOTAL-$WANTED_BACKUPS+1)) | cut -d \" \" -f 8\`; do sudo rm -rf \$war; done"
    ssh user @ server.di.sviluppo "sudo cp max.war /bin/tomcat-6.0.18/webapps/."
    Gli spazi tra @ e server.di.sviluppo li ho messi per evitare che il forum lo trasformasse in indirizzo email.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  2. #2
    Assumo che la questione diventi la seguente: se io voglio eseguire via ssh la seguente sequenza di comandi (questo e' l'esatto codice che eseguo sul server e fa quello che voglio)
    codice:
    TOTAL=`ls -l /tmp/max.war.*| wc -l`;for war in `ls -l /tmp/max.war.* | head -n $(($TOTAL-3)) | tail -n $(($TOTAL-3+1)) | cut -d " " -f 8`; do sudo rm -rf $war; done
    cosa devo scrivere come argomento del comando ssh?
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570

    Re: [bash] cosa c'e' che non va in questo script?

    [QUOTE]Originariamente inviato da mxa
    codice:
    ssh user @ server.di.sviluppo "TOTAL=\`ls -l /tmp/max.war.*| wc -l\`;for war in \`ls -l /tmp/max.war.* | head -n \$((\$TOTAL-$WANTED_BACKUPS)) | tail -n \$((\$TOTAL-$WANTED_BACKUPS+1)) | cut -d \" \" -f 8\`; do sudo rm -rf \$war; done"
    il prob che spesso si incontra in questi casi e' la gestione delle variabili
    alcune sono locali altre hanno vita solo sul server remoto (ssh_server)
    quindi qui entra in gioco la protezione di alcuni caratteri --> $ (dollaro) in primis

    sulla carta, riscriverei cosi' quanto sopra:
    codice:
    ssh user @ server.di.sviluppo "
      TOTAL=\$(ls -l /tmp/max.war.*| wc -l) 
      for war in \$(ls -l /tmp/max.war.* | head -n \$((\$TOTAL-$WANTED_BACKUPS)) | tail -n \$((\$TOTAL-$WANTED_BACKUPS+1)) | cut -d ' ' -f 8)
      do
        sudo rm -rf \$war
      done
    "
    In pratica proteggo solamente le variabili
    $TOTAL
    $war
    il resto non mi sembra da proteggere

    prova e fammi sapere se ho scritto delle vaccate.
    ps: non ho provato lo script, ma sono solito fare queste cosucce anche io... es. backup schedulati delle macchine virtuali su server con vmwareserver 1.x

    domanda: perche' usi "ls -l " e non semplicemente un "ls -1" ?

    [edit]
    mi accorgo di avere riscritto le stesse cose che hai fatto tu... 'naggia
    strano che non va... provo nuovamente da me e ti faccio sapere
    slack? smack!

  4. #4
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570
    ho fatto questo piccolo test:
    codice:
    #!/bin/bash -x
    
    WANTED_BACKUPS=3
    
    date=$(date "+%Y%m%d-%H.%M")
    
    ssh cacao74@slack64 "
      cp /bin/bash /tmp/ksh-${date}
    "
    
    ssh cacao74@slack64 "
      TOTAL=\$(ls -1 /bin/*sh | wc -l)
      for shell in \$( ls -1 /bin/*sh | head -n \$(( \$TOTAL - $WANTED_BACKUPS )) | tail -n \$(( \$TOTAL - $WANTED_BACKUPS + 1 )) )
      do
        echo ls -l \$shell
      done
    "
    
    ssh cacao74@slack64 "
      cp /bin/ksh /tmp/ksh-${date}
    "
    output
    codice:
    cacao74@vaio:~$ ./cacao2.sh 
    + WANTED_BACKUPS=3
    ++ date +%Y%m%d-%H.%M
    + date=20100731-13.04
    + ssh cacao74@slack64 '
      cp /bin/bash /tmp/ksh-20100731-13.04
    '
    + ssh cacao74@slack64 '
      TOTAL=$(ls -1 /bin/*sh | wc -l)
      for shell in $( ls -1 /bin/*sh | head -n $(( $TOTAL - 3 )) | tail -n $(( $TOTAL - 3 + 1 )) )
      do
        echo ls -l $shell
      done
    '
    ls -l /bin/ash
    ls -l /bin/bash
    ls -l /bin/csh
    ls -l /bin/ksh
    ls -l /bin/rksh
    + ssh cacao74@slack64 '
      cp /bin/ksh /tmp/ksh-20100731-13.04
    '
    se puo' servire...
    slack? smack!

  5. #5
    Ho cambiato ls -l in ls -1 e tolto il cut, e ho rimpiazzato gli apici inversi con $() e adesso funziona. Mah :master:

    Grazie
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.