Come avviare Solr automaticamente?

Al momento devo andare a /usr/java/apache-solr-1.4.0/example e quindi fare:

java -jar start.jar

Come faccio a farlo avviare automaticamente all’avvio?

Sto su un server condiviso Linux.

InformationsquelleAutor bluedaniel | 2010-01-27

 

8 Replies
  1. 70

    Se hai accesso root alla macchina, ci sono un certo numero di modi per farlo, basato sul sistema del flusso di inizializzazione (init script, systemd, etc.)

    Ma se non avete il root, cron è pulito e coerente per eseguire programmi al riavvio.

    In primo luogo, sapere dove java si trova sulla vostra macchina. Il comando sotto dirti dove si trova:

    $ which java
    

    Quindi, il bastone con il seguente codice in uno script di shell, sostituendo il percorso di java sotto (/usr/bin) con il percorso che avete ottenuto dal comando di cui sopra.

    #!/bin/bash
    
    cd /usr/java/apache-solr-1.4.0/example
    /usr/bin/java -jar start.jar
    

    È possibile salvare questo script in una certa posizione (ad esempio, $HOME) come start.sh. Dare mondiale permesso di esecuzione (per semplificare) eseguendo il seguente comando:

    $ chmod og+x start.sh
    

    Ora, prova lo script e assicurarsi che funzioni correttamente dalla riga di comando.

    $ ./start.sh
    

    Se tutto funziona bene, è necessario aggiungere ad uno dei computer, gli script di avvio. Il modo più semplice per farlo è quello di aggiungere la seguente riga alla fine del /etc/rc.locale.

    # ... snip contents of rc.local ...
    # Start Solr upon boot.
    /home/somedir/start.sh
    

    In alternativa, se non si dispone dell’autorizzazione per modificare rc.locale, allora si può aggiungere al vostro crontab come. Digitare quanto segue nella riga di comando:

    $ crontab -e
    

    Si aprirà un editor. Aggiungere la seguente riga:

    @reboot /home/somedir/start.sh
    

    Se il vostro sistema Linux supporta (che di solito lo fa), questo farà sì che il vostro script viene eseguito all’avvio.

    Se non ho errori di battitura di cui sopra, dovrebbe funzionare bene per voi. Fammi sapere come va.

    • Il successo!!! Grazie tanto non avete idea di
    • Questo è molto utile. Grazie!
    • Pessima l’idea di iniziare qualcosa con cron all’avvio
    • Può spiegare perché?
    • perché cron è per l’esecuzione di comandi a intervalli regolari, non in risposta a un trigger. Solo perché si può fare qualcosa, non significa che si dovrebbe, e si è cattiva pratica di mettere qualcosa di cui non appartiene, a meno che assolutamente necessario.
    • Non si deve usare crontab per init cose all’avvio. È necessario utilizzare l’init livelli linuxforums.org/forum/mandriva-linux/…
    • Ho già fatto tramite crontab! Grazie! @Alexander ciò che è sbagliato, tramite crontab per questo? (Io sono un principiante su questo argomento)
    • In realtà, cron @reboot è l’unico modo standard di avvio di processi dopo il riavvio per regolare gli utenti senza privilegi di root. Non vedo problemi ad usarlo.
    • Sono d’accordo, non c’è nulla di sbagliato e da un punto di vista dell’amministratore si è preferito, in quanto è facile da monitorare qualsiasi cron processo di qualsiasi utente, molto meglio quindi solo casualmente aggiungere i processi all’avvio per ogni utente che richiede l’

  2. 76

    Come si sta su una Linux box, devi chiedere all’amministratore di sistema per effettuare le seguenti operazioni, probabilmente.

    Creare uno script di avvio in /etc/init.d/solr.

    Copia questo codice, il mio Solr script di avvio, in che file:

    #!/bin/sh
    
    # Prerequisites:
    # 1. Solr needs to be installed at /usr/local/solr/example
    # 2. daemon needs to be installed
    # 3. Script needs to be executed by root
    
    # This script will launch Solr in a mode that will automatically respawn if it
    # crashes. Output will be sent to /var/log/solr/solr.log. A PID file will be
    # created in the standard location.
    
    start () {
        echo -n "Starting solr..."
    
        # Start daemon
        daemon --chdir='/usr/local/solr/example' --command "java -jar start.jar" --respawn --output=/var/log/solr/solr.log --name=solr --verbose
    
        RETVAL=$?
        if [ $RETVAL = 0 ]
        then
            echo "done."
        else
            echo "failed. See error code for more information."
        fi
        return $RETVAL
    }
    
    stop () {
        # Stop daemon
        echo -n "Stopping solr..."
    
        daemon --stop --name=solr  --verbose
        RETVAL=$?
    
        if [ $RETVAL = 0 ]
        then
            echo "Done."
        else
            echo "Failed. See error code for more information."
        fi
        return $RETVAL
    }
    
    
    restart () {
        daemon --restart --name=solr  --verbose
    }
    
    
    status () {
        # Report on the status of the daemon
        daemon --running --verbose --name=solr
        return $?
    }
    
    
    case "$1" in
        start)
            start
        ;;
        status)
            status
        ;;
        stop)
            stop
        ;;
        restart)
            restart
        ;;
        *)
            echo $"Usage: solr {start|status|stop|restart}"
            exit 3
        ;;
    esac
    
    exit $RETVAL
    

    Quindi eseguire:

    chkconfig –add solr

    O (su Ubuntu):

    update-rc.d solr default

    … o, se la vostra distribuzione di Linux non hanno chkconfig (o update-rc.d), link /etc/init.d/solr per /etc/rc3.d/S99solr e /etc/rc5.d/S99solr e /etc/rc3.d/K01solr e /etc/rc5.d/K01solr:

    % ln -s /etc/init.d/solr /etc/rc3.d/S99solr
    
    % ln -s /etc/init.d/solr /etc/rc5.d/S99solr
    
    % ln -s /etc/init.d/solr /etc/rc3.d/K01solr
    
    % ln -s /etc/init.d/solr /etc/rc5.d/K01solr
    

    Ora al riavvio Solr sarà di avvio in esecuzione di livelli 3 e 5 (console con rete & completa GUI).

    Per avviare solr eseguire manualmente:

    % /etc/init.d/solr start
    
    • Io sono admin, ho service solr does not support chkconfig durante l’esecuzione chkconfig --add solr, cosa fa lo script di avvio devono essere chiamati? solo solr? senza estensione?
    • È possibile chiamare lo script in /etc/init.d cosa ti piace. Se chkconfig non è bello giocare, fare i collegamenti manualmente (ln-s comandi). Davvero chkconfig fa… solo fornisce un ottimo strumento per farlo per voi. Ah… anche assicurarsi che il solr script in init.d è eseguibile: chmod +x /etc/init.d/solr (o quello che si chiama it)
    • non ci sono dadi, Starting solr: /bin/bash: java: command not found di errore quando % /etc/init.d/solr start e non viene eseguito al boot ancora
    • Sembra come se lo script deve richiamare java con il suo percorso assoluto.
    • la parte di script ha bisogno di cambiare e di riflettere?
    • Se sei su ubuntu: update-rc.d solr impostazioni predefinite
    • Probabilmente /usr/bin/java, non /usr/java. Fare whereis java sul vostro sistema e scoprire.
    • sto cercando di creare un init.d lo script per solr e copiato il codice di cui sopra. ricevo l’errore: “demone: opzione non valida — ‘j'”. Tutte le idee?
    • Per gli utenti di Ubuntu: . /etc/init.d/functions non esiste, utilizzare: . /etc/init.d e il demone non funziona elencati, vedi: stackoverflow.com/questions/4420127/daemon-for-solr
    • Grazie ! E ‘ stato molto utile e ha salvato il mio tempo.
    • ciao, dove posso trovare il demone? Grazie
    • per il fissaggio service solr does not support chkconfig errore durante l’esecuzione di chkconfig --add solr si dovrebbe aggiungere # chkconfig e # description direttive per la parte superiore del /etc/init.d/solr script dopo la prima riga(dopo “#!/bin/sh“) come questo: # chkconfig: 2345 95 05 e # description: Starts & Stops apache solr process.. per ulteriori informazioni, vedere qui.

  3. 14

    Aggiungere le seguenti linee al mio /etc/init.d/solr file funziona per il supporto di Red Hat Linux (li ho copiato da /etc/init.d/mysql dopo aver letto i commenti di altri qui).

    # Comments to support chkconfig on Red Hat Linux
    # chkconfig: 2345 64 36
    # Description: A very fast and reliable search engine.
    
    • Grazie per l’aggiunta di questo stavo cercando di capire perché il mio script di init stava dando il messaggio “servizio di solr non supporta chkconfig”
    • Grazie per rispondere alla domanda invece di offrire un hackish soluzione!
  4. 12

    Ci sono tre passi che dovete fare qui:

    1. Creare lo script, renderlo eseguibile e metterlo nel posto giusto.
    2. Rendere lo script si avvia correttamente al riavvio.
    3. Bonus: Impostare un logrotation script in modo registri di non uscire di controllo.

    Per il numero uno, ho accordato supermagic script da sopra. Si è OK, ma aveva un certo numero di errori di battitura, privo di alcune funzionalità (stato, riavviare), di non utilizzare il demone di utilità in modo molto efficace.

    Ecco la mia versione dello script (assicurati di avere demone installato per farlo funzionare):

    #!/bin/sh 
    
    # Prerequisiti: 
    # 1. Solr deve essere installato in /usr/local/solr/esempio 
    # 2. daemon ha bisogno di essere installato 
    # 3. Script deve essere eseguito da root 
    
    # Questo script di lancio di Solr in una modalità che verranno automaticamente respawn, se si 
    # si blocca. L'uscita sarà inviata a /var/log/solr/solr.log. Un file pid sarà 
    # creato nella posizione standard. 
    
    start () { 
    echo-n "a Partire solr..." 
    
    # inizio demone 
    daemon --chdir='/usr/local/solr/esempio' --comando "java -jar start.jar" --respawn --output=/var/log/solr/solr.log --name=solr --verbose 
    
    RETVAL=$? 
    if [ $RETVAL = 0 ] 
    quindi 
    echo "fatto". 
    altro 
    echo "impossibile. Visualizzato il codice di errore per ulteriori informazioni." 
    fi 
    return $RETVAL 
    } 
    
    stop () { 
    # interrompere demone 
    echo-n "Interruzione di solr..." 
    
    daemon --stop --name=solr --verbose 
    RETVAL=$? 
    
    if [ $RETVAL = 0 ] 
    quindi 
    echo "fatto". 
    altro 
    echo "impossibile. Visualizzato il codice di errore per ulteriori informazioni." 
    fi 
    return $RETVAL 
    } 
    
    
    restart () { 
    daemon --riavviare --name=solr --verbose 
    } 
    
    
    stato () { 
    # report sullo stato del demone 
    daemon --esecuzione --verbose --name=solr 
    return $? 
    } 
    
    
    case "$1" in 
    start) 
    inizio 
    ;; 
    stato) 
    stato 
    ;; 
    stop) 
    stop 
    ;; 
    riavviare) 
    riavviare 
    ;; 
    *) 
    echo $"Usage: solr {start|stato|stop|restart}" 
    uscita 3 
    ;; 
    esac 
    
    exit $RETVAL 
    

    Inserire questo script in /etc/init.d/solr, renderlo eseguibile e si dovrebbe essere buono con la fase uno. È ora possibile avviare/fermare/riavviare/stato una solr demone con /etc/init.d/solr start|stop|restart|stato

    Per la fase due, eseguire le seguenti operazioni su una macchina Ubuntu (non so Redhat):

    update-rc.d solr defaults
    

    Una volta fatto questo, siete in buona forma, ma probabilmente si desidera ruotare i log correttamente a un certo punto, ecco una buona config per i registri:

    /var/log/solr/*.log {
      weekly
      rotate 12
      compress
      delaycompress
      create 640 root root
      postrotate
        /etc/init.d/solr restart
      endscript
    }
    

    Posto il file in /etc/logrotate.d/solr, e si dovrebbe essere buona per andare, assumendo logrotate è in esecuzione (di solito è).

    • Link a commons.apache.org/daemon quando si dice per assicurarsi che il demone è installato ma l’installazione del pacchetto non fare un comando demone disponibili, e i documenti sul sito che la fanno apparire come una classe java che viene incorporato in un progetto java (quindi per solr, demone dovrebbe essere parte di solr). Mi manca qualcosa? (Sto cercando di indovinare io sono 😉
    • Ops, sì, collegamento sbagliato. Mi dispiace. Aggiornato.
  5. 6

    Ho risposto a questa domanda già una volta, ma quella risposta era per i sistemi operativi utilizzati SysV e questo è per i sistemi operativi più recenti che utilizzano sempre di più systemd.

    Come in la mia altra risposta, ci sono tre cose che devi fare qui:

    1. Creare lo script e metterlo nel posto giusto.
    2. Rendere lo script si avvia correttamente al riavvio.
    3. Bonus: Fare systemd registri persistente.

    1. Creazione script e metterlo nel posto giusto

    Ecco un systemd unità di file che è possibile utilizzare (questi sostituire il SysV init file). Il nome solr.service.

    [Unit]
    Description=Apache Solr
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=simple
    Environment="XMX=2G"
    WorkingDirectory=/usr/local/solr/example
    ExecStart=/usr/bin/java -jar -server -Xmx${XMX} start.jar
    Restart=on-failure
    LimitNOFILE=10000
    
    [Install]
    WantedBy=multi-user.target
    

    Nota che c’è una configurazione per Solr memoria. Probabilmente si vorrà tweak che per i tuoi scopi. Se si dispone di un numero di variabili si sta passando da systemd, si può fare con il EnvironmentFile direttiva.

    Più documentazione per questi file è qui.

    2. Rendere lo script di avvio correttamente all’avvio

    Questo è abbastanza semplice, ma ci sono delle regole. Per farlo partire al boot, metti il file in /etc/systemd/system/solr.service. Non è possibile utilizzare un collegamento simbolico in questa directory, non provare.

    Una volta lì, è possibile abilitare il demone per eseguire l’avvio con:

    sudo systemctl enable solr
    

    Ed è possibile avviare, arrestare, lo stato con:

    sudo systemctl {start|stop|status} solr
    

    3. Fare systemd registri persistente

    Per impostazione predefinita, systemd registri non sono persistenti e si sono persi ogni volta che si riavvia il sistema. Se questo non è ciò che più si desidera, è possibile renderle persistenti creando una directory:

    sudo mkdir -p /var/log/journal/
    

    E quindi riavviare il systemd journaling demone:

    sudo systemctl restart systemd-journald
    

    Una volta che è completo, systemd‘s journaling demone ricevere tutte le stdout e stderr che Solr crea e memorizzati in un formato binario sotto /var/log/journal/.

    Il modo systemd gestisce la registrazione è abbastanza carino e vale la pena di studiare se non si ha familiarità con esso. Nel frattempo, è sufficiente sapere che per leggere le vostre voci del registro è necessario utilizzare un nuovo strumento chiamato journalctl. Per esempio, seguire il vostro solr registri:

    journalctl -u solr -f
    

    E ci sono anche le bandiere per fare in base alla data di filtraggio e cose del genere.

    3.1 modificare il file di registro

    Sezione Bonus! Se si desidera modificare il file di registro, è possibile leggi tutte le informazioni nella documentazione qui, ma le impostazioni predefinite sono in realtà molto sicuro e sano di mente (i registri sono compressi per impostazione predefinita, non può crescere troppo grande, sono limitato, e sono scritti per il disco in batch).

    • Grazie! Lavorando su una Ubuntu 16.10.
    • Funziona! Grazie 🙂
  6. 3

    Seguire supermagic i commenti, quindi seguire questa

    http://codingrecipes.com/service-x-does-not-support-chkconfig

    Dice,

    1 – Copia il tuo script in /etc/init.d cartella 
    2 – cd /etc/init.d 
    3 – chmod +x myscript 
    4 – Aggiungere queste linee, tra cui #, subito dopo #!/bin/bash o #!/bin/sh: 
    
    # chkconfig: 2345 95 20 
    # descrizione: certa descrizione 
    # Che cosa il vostro script (non sono sicuro se questo è necessario, però) 
    # processname: myscript 
    
    

    Allora si può fare

    chkconfig –add myscript

  7. 1

    init.d/solr script testato su Centos 6/Amazon Linux. Si avvolge solr nativa del CLI.

    #!/bin/bash
    # description: Starts and stops Solr production
    
    
    PIDFILE=/var/run/solr.pid
    SOLR_HOME=/usr/share/solr
    START_COMMAND="$SOLR_HOME/bin/solr start -p 8984 -noprompt -m 1g"
    NAME="Solr"
    
    
    start() {
      echo  "Starting $NAME"
      if [ -f $PIDFILE ]; then
        echo -n "$PIDFILE exists. $NAME may be running."
      else
        str=`$START_COMMAND`
        pid=`echo $str | grep -o "pid=[0-9]*" | grep -o "[0-9]*"`
        if [ "$pid" == "" ];
        then
          echo "[FATAL ERROR] Failed to extract pid. Exiting!"
          exit 1
        fi
        echo $pid > $PIDFILE
      fi
      return 0
    }
    
    
    case "$1" in
      start)
        start
      ;;
      stop)
        echo "Stopping $NAME .."
        $SOLR_HOME/bin/solr stop
        rm -f $PIDFILE
      ;;
      status)
        $SOLR_HOME/bin/solr status
      ;;
      restart)
        $0 stop
        #sleep 2
        $0 start
      ;;
    
      *)
        echo "Usage: $0 (start | stop | restart | status)"
        exit 1
        ;;
    
    esac
    exit $?
    

Lascia un commento