web-dev-qa-db-fra.com

Comment démarrer Solr automatiquement?

Pour le moment, je dois aller à /usr/Java/Apache-solr-1.4.0/example et ensuite:

Java -jar start.jar

Comment puis-je faire en sorte que cela démarre automatiquement au démarrage?

Je suis sur un serveur Linux partagé.

49
bluedaniel

Si vous avez un accès root à votre machine, il existe plusieurs façons de le faire en fonction du flux d'initialisation de votre système (scripts d'initialisation, systemd, etc.)

Mais si vous n'avez pas root, cron a un moyen propre et cohérent d'exécuter des programmes au redémarrage.

Tout d'abord, découvrez où Java se trouve sur votre machine. La commande ci-dessous vous indiquera où il se trouve:

$ which Java

Ensuite, collez le code suivant dans un script Shell, en remplaçant le chemin Java ci-dessous (/ usr/bin) par le chemin obtenu à partir de la commande ci-dessus.

#!/bin/bash

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

Vous pouvez enregistrer ce script dans un certain emplacement (par exemple, $ HOME) en tant que start.sh. Donnez-lui la permission d'exécuter world (pour simplifier) ​​en exécutant la commande suivante:

$ chmod og+x start.sh

Maintenant, testez le script et assurez-vous qu'il fonctionne correctement à partir de la ligne de commande.

$ ./start.sh

Si tout fonctionne bien, vous devez l'ajouter à l'un des scripts de démarrage de votre machine. La façon la plus simple de le faire est d'ajouter la ligne suivante à la fin de / etc/rc.local.

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

Alternativement, si vous n'êtes pas autorisé à modifier rc.local, vous pouvez l'ajouter à votre utilisateur crontab comme tel. Tapez d'abord ce qui suit sur la ligne de commande:

$ crontab -e

Cela fera apparaître un éditeur. Ajoutez-y la ligne suivante:

@reboot /home/somedir/start.sh

Si votre système Linux le prend en charge (ce qu'il fait généralement), cela garantira que votre script sera exécuté au démarrage.

Si je n'ai pas de fautes de frappe ci-dessus, cela devrait bien fonctionner pour vous. Dites-moi comment ça se passe.

70
0xfe

Comme vous êtes sur une boîte Linux partagée, vous devrez probablement demander à l'administrateur système de faire ce qui suit.

Créez un script de démarrage dans /etc/init.d/solr.

Copiez ce code, mon script de démarrage Solr, dans ce fichier:

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

Exécutez ensuite:

chkconfig --add solr

Ou (sur Ubuntu):

update-rc.d solr par défaut

... ou, si votre distribution Linux n'a pas chkconfig (ou update-rc.d), lien /etc/init.d/solr à /etc/rc3.d/S99solr et /etc/rc5.d/S99solr et /etc/rc3.d/K01solr et /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

Maintenant, au redémarrage, Solr démarrera aux niveaux d'exécution 3 et 5 (console avec réseau et complète GUI ).

Pour démarrer solr, exécutez manuellement:

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

Ajout des lignes suivantes à mon /etc/init.d/solr le fichier fonctionne pour prendre en charge Red Hat Linux (je les ai copiés à partir de /etc/init.d/mysql après avoir lu les commentaires des autres ici).

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

Vous devez effectuer trois étapes ici:

  1. Créez le script, rendez-le exécutable et placez-le au bon endroit.
  2. Faites en sorte que le script démarre correctement au redémarrage.
  3. Bonus: configurez un script de rotation des journaux afin que les journaux ne deviennent pas incontrôlables.

Pour le numéro un, j'ai réglé le script de supermagic d'en haut. C'était correct, mais il y avait un certain nombre de fautes de frappe, manquait de fonctionnalités (état, redémarrage), n'utilisait pas l'utilitaire démon très efficacement.

Voici ma version du script (assurez-vous que daemon est installé pour que cela fonctionne):

 #!/bin/sh 
 
 # Prérequis: 
 # 1. Solr doit être installé dans /usr/local/solr/example
 # 2. le démon doit être installé 
 # 3. Le script doit être exécuté par la racine 
 
 # Ce script lancera Solr dans un mode qui réapparaîtra automatiquement s'il 
 # plante. La sortie sera envoyée à /var/log/solr/solr.log. Un fichier pid sera 
 # Créé à l'emplacement standard. 
 
 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. Voir code d'erreur pour plus d'informations." 
 fi 
 return $ RETVAL 
} 
 
 stop () {
 # stop daemon 
 echo -n "Stopping solr ..." 
 
 daemon - stop --name = solr --verbose 
 RETVAL = $? 
 
 if [$ RETVAL = 0] 
 then 
 echo "done. "
 else 
 echo" a échoué. Voir le code d'erreur pour plus d'informations. "
 fi 
 return $ RETVAL 
} 
 
 
 restart () {
 démon --restart --name = solr --verbose 
} 
 
 
 status () {
 # rapport sur l'état du démon 
 daemon --running --verbose --name = solr 
 return $? 
} 
 
 
 case "$ 1" in 
 start) 
 démarrer 
 ;; 
 état) 
 état 
 ;; 
 arrêter) 
 arrêter 
 ;; 
 redémarrer) 
 redémarrer 
 ;; 
 *) 
 echo $ "Utilisation: solr {start | status | stop | restart}" 
 sortie 3 
 ;; 
 esac 
 
 sortie $ RETVAL 

Placez ce script dans /etc/init.d/solr, rendez-le exécutable, et vous devriez être bon avec la première étape. Vous pouvez maintenant démarrer/arrêter/redémarrer/statut un démon solr avec /etc/init.d/solr start | stop | restart | status

Pour l'étape deux, exécutez ce qui suit sur une machine Ubuntu (ne connaissez pas Redhat):

update-rc.d solr defaults

Une fois cela fait, vous êtes en assez bonne forme, mais vous voulez probablement faire tourner les journaux correctement à un moment donné, voici donc une bonne configuration pour les journaux:

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

Placez ce fichier dans /etc/logrotate.d/solr, et vous devriez être prêt à partir, en supposant que logrotate est en cours d'exécution (il l'est généralement).

12
mlissner

J'ai répondu à cette question ne fois déjà , mais cette réponse était pour les systèmes d'exploitation qui utilisaient SysV et celle-ci est pour les systèmes d'exploitation plus récents qui utilisent de plus en plus systemd .

Comme dans mon autre réponse , il y a trois choses que vous devrez faire ici:

  1. Créez le script et placez-le au bon endroit.
  2. Faites en sorte que le script démarre correctement au redémarrage.
  3. Bonus: rendre les journaux systemd persistants.

1. Créer le script et le mettre au bon endroit

Voici un fichier d'unité systemd que vous pouvez utiliser (ceux-ci remplacent les fichiers d'initialisation SysV). Nomme le 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

Notez qu'il y a une configuration là-dedans pour la mémoire de Solr. Vous voudrez probablement l'ajuster à vos propres fins. Si vous passez un certain nombre de variables à systemd, vous pouvez le faire avec la directive EnvironmentFile.

Plus de documentation pour ces fichiers est ici .

2. Faire le démarrage du script correctement au démarrage

C'est assez simple, mais il y a des règles. Pour le faire démarrer au démarrage, placez le fichier dans /etc/systemd/system/solr.service. Vous ne pouvez pas utiliser de lien symbolique dans ce répertoire, n'essayez pas .

Une fois que c'est là, vous pouvez activer le démon pour s'exécuter au démarrage avec:

Sudo systemctl enable solr

Et vous pouvez démarrer, arrêter, statuer avec:

Sudo systemctl {start|stop|status} solr

3. Rendre les journaux systemd persistants

Par défaut, les journaux systemd ne sont pas persistants et ils sont perdus chaque fois que vous redémarrez le système. Si ce n'est pas ce que vous désirez, vous pouvez les rendre persistants en créant un répertoire:

Sudo mkdir -p /var/log/journal/

Ensuite, redémarrez le démon de journalisation systemd:

Sudo systemctl restart systemd-journald

Une fois cela terminé, le démon de journalisation de systemd recevra tous les stdout et stderr que Solr crée et il sera stocké dans n format binaire sous /var/log/journal/.

La façon dont systemd gère la journalisation est assez soignée et mérite d'être étudiée si vous ne la connaissez pas. En attendant, sachez que pour lire vos entrées de journal, vous devrez utiliser un nouvel outil appelé journalctl. Par exemple, cela suivra vos journaux solr:

journalctl -u solr -f

Et il y a aussi des drapeaux pour faire du filtrage basé sur la date et des choses comme ça.

3.1 Ajuster les fichiers journaux

Section bonus! Si vous souhaitez modifier les fichiers journaux, vous pouvez lire tout cela dans la documentation ici , mais les valeurs par défaut sont en fait très sûres et raisonnables (les journaux sont compressés par défaut, ne peuvent pas devenir trop volumineux, sont limités en taux et sont écrits sur le disque par lots).

6
mlissner

Suivez les commentaires de supermagic, puis suivez ceci

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

Il dit,

 1 - Copiez votre script dans le dossier /etc/init.d 
 2 - cd /etc/init.d[.____.[3 - chmod + x myscript 
 4 - Ajoutez ces lignes, y compris #, juste après #!/Bin/bash ou #!/Bin/sh: 
 
 # Chkconfig: 2345 95 20 
 # Description: Some description 
 # Ce que fait votre script (mais je ne sais pas si c'est nécessaire) 
 # Nom_processus: myscript 
 

Ensuite, vous pouvez faire

chkconfig --add myscript

3
Visitor

script init.d/solr testé sur Centos 6/Amazon Linux. Il enveloppe la CLI native de solr.

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

Vérifier

man 5 crontab

Voir si @reboot est pris en charge sur le système Linux que vous utilisez.

0
John La Rooy