Il rilevamento non riesce nello script di installazione

Ho scritto uno script di installazione per installare i miei programmi e le impostazioni preferite dopo aver ricevuto un nuovo server.

apt-get install git git clone http://me@myvimsetting.github.com .vim ln -s .vimrc .vim/vimrc ... 

Ma se qualcosa di errato accade durante l'installazione, come posso interrompere lo script di installazione e registrare l'errore? Ad esempio, se il server github è in discesa, è ovviamente inutile creare un collegamento simbolico al vimrc non esistente.

  • creare "file virtuale" da output di command bash?
  • Bash: Esegui le linee condotte da stdin
  • sudo -i ma mantieni la directory di lavoro corrente
  • Come posso usare sudo per verificare se esiste un file?
  • get la notifica quando il servizio monitorato systemd entra nello stato di errore
  • Creare un utente limitato sul server Debian
  • (o hai un approccio migliore per inizializzare un server?)

    3 Solutions collect form web for “Il rilevamento non riesce nello script di installazione”

    A livello di base, è ansible eseguire alcune operazioni come redirect STDERR in un file di text per registrare gli errori

    git clone http://me@myvimsetting.github.com .vim 2>> ~/logs/vim-error.txt

    O in questo esempio particolare si potrebbe fare un'istruzione if

     if [ -f .vimrc ] ## -f means "if file exists" then ln -s .vimrc .vim/vimrc fi 

    O dopo il command del clone di git puoi controllare lo stato di output e se non è 0 uscire dallo script

     if [ $? -ne 0 ] then exit 1 fi 

    Tutti i miei script sono script di livello n00b e ho trovato che queste cose in genere faranno quello che ho bisogno di loro.

    certo, questo è l'approccio che uso. Tuttavia il principio che stai cercando è la idempotenza e la tolleranza ai guasti, il che significa che lo script non dovrebbe mettere in discussione niente e può degradarsi in modo elegante. Per la creazione del collegamento, verificare se il file esiste in primo luogo come così;

     [ -s .vimrc ] && ln -s .vimrc .vim/vimrc 

    ma è anche utile per controllare che il collegamento non esiste già; (cioè saltare se esiste)

     [ -s .vimrc ] && [ ! -L .vim/vimrc ] && ln -s .vimrc .vim/vimrc 

    che in sostanza dice, controlla se il file esiste e che non è zero, quindi crea solo il collegamento se non lo è già. Ci sono parecchi test di file supportti da bash descritti nel manuale qui

    Ci sono anche di solito versione corta di questi, ma potrei anche mostrarti la versione completa …

    tipico è utile per eseguire prima un apt-get update , per aggiornare le liste dei pacchetti …

    Ovviamente non c'è alcun motivo per cercare di installare git se il suo già installato (anche se si potrebbe desiderare di aggiornarlo

     dpkg -l git >/dev/null || apt-get -q -y install git 

    Se volete solo la versione più recente, qualunque cosa, allora non entrambi con il test e l'apt solo aggiornare se c'è uno disponibile;

      apt-get -q -y install git 

    Tendo a utilizzare i routes completi negli script di installazione, solo per ricordarmi e assicurarsi che non fa nulla stupido. per esempio

      #explicitly set the full path somewhere HOME=/home/tomh #and then double check, partcular if you are about to do something descructive [ "$HOME" == "" ] && exit 99 [ -s $HOME/.vimrc ] && ln -s $HOME/.vimrc $HOME/.vim/vimrc 

    per get il file da git volevo sparare per qualcosa di simile;

    if [ ! -d $HOME/.vim ]; then
    cd $HOME
    git clone http://me@myvimsetting.github.com .vim
    else
    cd $HOME/.vim
    git pull
    fi

    controllare qualsiasi cosa prima di utilizzare, non ho provato

    Chef, specialmente chef-solo . Può essere un po 'di configuration iniziale, ma una volta che hai i cookbook in vigore, la nuova configuration della macchina è in fondo enumerando il run_list per il server.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.