it-swarm.com.de

Wie starte ich Solr automatisch?

Im Moment muss ich zu /usr/Java/Apache-solr-1.4.0/example und dann mache:

Java -jar start.jar

Wie starte ich das beim Booten automatisch?

Ich arbeite auf einem gemeinsam genutzten Linux-Server.

49
bluedaniel

Wenn Sie Root-Zugriff auf Ihren Computer haben, gibt es eine Reihe von Möglichkeiten, dies basierend auf dem Initialisierungsfluss Ihres Systems zu tun (Init-Skripte, systemd usw.).

Wenn Sie jedoch kein Root-Verzeichnis haben, bietet cron eine saubere und konsistente Möglichkeit, Programme nach dem Neustart auszuführen.

Stellen Sie zunächst fest, wo sich Java auf Ihrem Computer befindet. Mit dem folgenden Befehl erfahren Sie, wo es sich befindet:

$ which Java

Fügen Sie dann den folgenden Code in ein Shell-Skript ein und ersetzen Sie den Pfad Java darunter (/ usr/bin) durch den Pfad, den Sie aus dem obigen Befehl erhalten haben.

#!/bin/bash

cd /usr/Java/Apache-solr-1.4.0/example
/usr/bin/Java -jar start.jar

Sie können dieses Skript an einem bestimmten Ort (z. B. $ HOME) als start.sh speichern. Erteilen Sie der World Execute-Berechtigung (zur Vereinfachung), indem Sie den folgenden Befehl ausführen:

$ chmod og+x start.sh

Testen Sie nun das Skript und stellen Sie sicher, dass es über die Befehlszeile ordnungsgemäß funktioniert.

$ ./start.sh

Wenn alles gut funktioniert, müssen Sie es einem der Startskripte Ihres Computers hinzufügen. Der einfachste Weg, dies zu tun, besteht darin, die folgende Zeile am Ende von / etc/rc.local einzufügen.

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

Wenn Sie keine Berechtigung zum Bearbeiten von rc.local haben, können Sie es alternativ auch zu Ihrer Benutzer-crontab hinzufügen. Geben Sie zuerst Folgendes in die Befehlszeile ein:

$ crontab -e

Dies öffnet einen Editor. Fügen Sie die folgende Zeile hinzu:

@reboot /home/somedir/start.sh

Wenn Ihr Linux-System dies unterstützt (was normalerweise der Fall ist), wird sichergestellt, dass Ihr Skript beim Start ausgeführt wird.

Wenn ich oben keine Tippfehler habe, sollte es für Sie gut funktionieren. Lass mich wissen, wie es geht.

70
0xfe

Wenn Sie auf einer gemeinsam genutzten Linux-Box arbeiten, müssen Sie wahrscheinlich den Systemadministrator bitten, die folgenden Schritte auszuführen.

Erstellen Sie ein Startskript in /etc/init.d/solr.

Kopieren Sie diesen Code, mein Solr-Startskript, in diese Datei:

#!/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

Dann renne:

chkconfig --add solr

Oder (unter Ubuntu):

standardmäßig ist update-rc.d solr aktiviert

... oder, wenn Ihre Linux-Distribution nicht über chkconfig (oder update-rc.d) verfügt, verknüpfen Sie /etc/init.d/solr mit /etc/rc3.d/S99solr und /etc/rc5.d/S99solr und /etc/rc3.d/K01solr und /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

Jetzt beim Neustart startet Solr in den Run Levels 3 und 5 (Konsole mit Netzwerk & voll GUI ).

So starten Sie solr manuell:

% /etc/init.d/solr start
76
SuperMagic

Hinzufügen der folgenden Zeilen zu meinem /etc/init.d/solr Datei unterstützt Red Hat Linux (ich habe sie von /etc/init.d/mysql nachdem ich Kommentare von anderen hier gelesen habe).

# Comments to support chkconfig on Red Hat Linux
# chkconfig: 2345 64 36
# Description: A very fast and reliable search engine.
14
Daniel Rijkhof

Hier müssen Sie drei Schritte ausführen:

  1. Erstellen Sie das Skript, machen Sie es ausführbar und platzieren Sie es an der richtigen Stelle.
  2. Stellen Sie sicher, dass das Skript beim Neustart ordnungsgemäß gestartet wird.
  3. Bonus: Richten Sie ein Logrotationsskript ein, damit Protokolle nicht außer Kontrolle geraten.

Für die Nummer eins habe ich Supermagics Drehbuch von oben gestimmt. Es war in Ordnung, hatte aber eine Reihe von Tippfehlern, hatte einige Funktionen (Status, Neustart) und nutzte das Daemon-Dienstprogramm nicht sehr effektiv.

Hier ist meine Version des Skripts (stellen Sie sicher, dass Daemon installiert ist, damit es funktioniert):

 #!/bin/sh 
 
 # Voraussetzungen: 
 # 1. Solr muss unter /usr/local/solr/example[.____ installiert werden. ] # 2. Daemon muss installiert sein 
 # 3. Skript muss von root ausgeführt werden 
 
 # Dieses Skript startet Solr in einem Modus, der automatisch wieder erscheint, wenn es 
# stürzt ab. Die Ausgabe wird an /var/log/solr/solr.log gesendet. Eine PID-Datei wird 
 # Am Standardspeicherort erstellt. 
 
 Start () {
 Echo -n "Starting solr ..." 
 
 # start daemon 
 daemon --chdir = '/ usr/local/solr/example' --kommando "Java -jar start.jar" --respawn --output =/var/log/solr/solr.log --name = solr --verbose 
 
 RETVAL = $? 
 wenn [$ RETVAL = 0] 
 dann 
 echo "done." 
 else 
 echo "failed. Weitere Informationen finden Sie im Fehlercode." 
 fi 
 return $ RETVAL 
} 
 
 stop () {
 # stop daemon 
 echo -n "Stop solr ..." 
 
 daemon - stop --name = solr --verbose 
 RETVAL = $? 
 
 wenn [$ RETVAL = 0] 
 dann 
 echo "done. "
 else 
 echo" fehlgeschlagen. Weitere Informationen finden Sie im Fehlercode. "
 fi 
 return $ RETVAL 
} 
 
 
 restart () {
 daemon --restart --name = solr --verbose 
} 
 
 
 status () {
 # Bericht über den Status des Dämons 
 daemon --running --verbose --name = solr 
 return $? 
} 
 
 
 case "$ 1" in 
 start) 
 Start 
; 
 Status) 
 Status 
; 
 Stopp) 
 Stopp 
 ;; 
 restart) 
 restart 
 ;; 
 *) 
 echo $ "Verwendung: solr {start | status | stop | restart}" 
 Ausfahrt 3 
; 
 Esac 
 
 Ausfahrt $ RETVAL 

Platzieren Sie dieses Skript unter /etc/init.d/solr, machen Sie es ausführbar, und Sie sollten mit Schritt 1 vertraut sein. Sie können nun einen Solr-Dämon mit /etc/init.d/solr start | stop | restart | status starten/stoppen/neu starten/statusieren

Führen Sie für Schritt zwei Folgendes auf einem Ubuntu-Computer aus (Sie kennen Redhat nicht):

update-rc.d solr defaults

Sobald dies erledigt ist, sind Sie in ziemlich guter Verfassung, aber Sie möchten die Protokolle wahrscheinlich irgendwann richtig drehen. Hier ist eine gute Konfiguration für die Protokolle:

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

Platzieren Sie diese Datei in /etc/logrotate.d/solr, und Sie sollten einsatzbereit sein, vorausgesetzt, dass logrotate ausgeführt wird (dies ist normalerweise der Fall).

12
mlissner

Ich beantwortete diese Frage schon einmal , aber diese Antwort galt für Betriebssysteme, die SysV verwendeten, und diese für neuere Betriebssysteme, die zunehmend systemd verwenden.

Wie in meine andere Antwort gibt es drei Dinge, die Sie hier tun müssen:

  1. Erstellen Sie das Skript und platzieren Sie es an der richtigen Stelle.
  2. Stellen Sie sicher, dass das Skript beim Neustart ordnungsgemäß gestartet wird.
  3. Bonus: systemd Protokolle persistent machen.

1. Erstellen Sie das Skript und platzieren Sie es an der richtigen Stelle

Hier ist eine Unit-Datei systemd, die Sie verwenden können (diese ersetzen die SysV-Init-Dateien). Nennen Sie es 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

Beachten Sie, dass dort eine Konfiguration für den Speicher von Solr vorhanden ist. Sie werden das wahrscheinlich nach Ihren eigenen Wünschen anpassen wollen. Wenn Sie eine Reihe von Variablen an systemd übergeben, können Sie dies mit der Direktive EnvironmentFile tun.

Weitere Dokumentation für diese Dateien finden Sie hier .

2. Starten Sie das Skript beim Booten ordnungsgemäß

Das ist ziemlich einfach, aber es gibt Regeln. Um es beim Booten zu starten, legen Sie die Datei in /etc/systemd/system/solr.service. Sie können in diesem Verzeichnis keinen Symlink verwenden, versuchen Sie es nicht .

Sobald dies geschehen ist, können Sie den Daemon für die Ausführung beim Booten aktivieren:

Sudo systemctl enable solr

Und Sie können es starten, stoppen und mit folgendem Status versehen:

Sudo systemctl {start|stop|status} solr

3. systemd Protokolle persistent machen

Standardmäßig sind systemd Protokolle nicht persistent und gehen verloren, wenn Sie das System neu starten. Wenn Sie dies nicht wünschen, können Sie sie persistent machen, indem Sie ein Verzeichnis erstellen:

Sudo mkdir -p /var/log/journal/

Und dann den Journal-Daemon systemd neu starten:

Sudo systemctl restart systemd-journald

Sobald dies abgeschlossen ist, erhält systemds Journaling-Daemon alle von Solr erstellten stdout- und stderr-Werte und wird in einem Binärformat unter /var/log/journal/.

Die Art und Weise, wie systemd mit der Protokollierung umgeht, ist ziemlich ordentlich und es lohnt sich, sie zu studieren, wenn Sie nicht mit ihr vertraut sind. In der Zwischenzeit müssen Sie ein neues Tool namens journalctl verwenden, um Ihre Protokolleinträge zu lesen. Dies folgt beispielsweise Ihren Solr-Protokollen:

journalctl -u solr -f

Es gibt auch Flags für die datumsbasierte Filterung und ähnliches.

3.1 Optimieren der Protokolldateien

Bonusbereich! Wenn Sie die Protokolldateien optimieren möchten, können Sie lesen Sie alles in der Dokumentation hier , aber die Standardeinstellungen sind eigentlich sehr sicher und vernünftig (Protokolle sind standardmäßig komprimiert, können nicht zu groß werden, sind geschwindigkeitsbeschränkt und werden in Stapeln auf die Festplatte geschrieben.

6
mlissner

Folgen Sie den Kommentaren von supermagic und folgen Sie diesen

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

Er sagt,

 1 - Kopieren Sie Ihr Skript in den Ordner /etc/init.d 
 2 - cd /etc/init.d[.____.owntown3 - chmod + x myscript 
 4 - Fügen Sie diese Zeilen, einschließlich #, direkt nach #!/Bin/bash oder #!/Bin/sh hinzu: 
 
 # Chkconfig: 2345 95 20 
 # Description: Some description 
 # Was Ihr Skript macht (nicht sicher, ob dies notwendig ist) 
 # Prozessname: myscript 
 

Dann kannst du machen

chkconfig --add myscript

3
Visitor

init.d/solr-Skript, das unter Centos 6/Amazon Linux getestet wurde. Es schließt die native CLI von solr ein.

#!/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 $?
1
Mayank Jaiswal

Prüfen

man 5 crontab

Sehen ob @reboot wird auf dem von Ihnen verwendeten Linux-System unterstützt.

0
John La Rooy