Comment démarrer Solr automatiquement ?
Question
En ce moment, je dois y aller /usr/java/apache-solr-1.4.0/example
puis faites :
java -jar start.jar
Comment faire pour que cela démarre automatiquement au démarrage ?
Je suis sur un serveur Linux partagé.
La solution
Si vous disposez d'un accès root à votre ordinateur, il existe plusieurs façons de procéder en fonction du flux d'initialisation de votre système (scripts d'initialisation, systemd, etc.)
Mais si vous n'avez pas de root, cron
dispose d'un moyen propre et cohérent d'exécuter des programmes au redémarrage.
Tout d’abord, découvrez où se trouve Java 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 que vous avez 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 à un emplacement (par exemple, $HOME) sous start.sh.Donnez-lui l'autorisation d'exécution mondiale (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 manière la plus simple de procéder consiste à 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 ainsi à votre crontab utilisateur.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 qui est généralement le cas), cela garantira que votre script sera exécuté au démarrage.
Si je n’ai aucune faute de frappe ci-dessus, cela devrait bien fonctionner pour vous.Faites-moi savoir comment ça se passe.
Autres conseils
Comme vous êtes sur une boîte Linux partagée, vous devrez demander à l'administrateur du système pour faire ce qui suit, sans doute.
Créer 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
Ensuite, exécutez:
chkconfig --add solr
Ou (sur Ubuntu):
par défaut Solr update-rc.d
... ou, si votre distribution Linux ne 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 redémarre dans les niveaux d'exécution 3 et 5 (console avec le réseau et plein ).
Pour commencer solr exécuter manuellement:
% /etc/init.d/solr start
Ajout des lignes suivantes à mon dossier /etc/init.d/solr
fonctionne pour soutenir Red Hat Linux (je les ai copiés à partir /etc/init.d/mysql
après avoir lu les commentaires par d'autres ici).
# Comments to support chkconfig on Red Hat Linux
# chkconfig: 2345 64 36
# Description: A very fast and reliable search engine.
Il y a trois étapes que vous devez faire ici:
- Créer le script, le rendre exécutable, et le mettre dans le bon endroit.
- le script de démarrage correctement au redémarrage.
- Bonus: Mettre en place un script logrotation si les journaux ne reçoivent pas de contrôle .
Pour le numéro un, j'ai accordé le script de Supermagic d'en haut. Il était OK, mais avait un certain nombre de fautes de frappe, manquait certaines fonctionnalités (état, redémarrage), ne pas utiliser l'utilitaire démon très efficacement.
Voici ma version du script (assurez-vous que vous avez démon installé pour que cela fonctionne):
#!/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
Placez ce script à /etc/init.d/solr, le rendre exécutable, et vous devriez être bien avec la première étape. Vous pouvez maintenant démarrer / arrêter / redémarrage / état d'un démon solr avec /etc/init.d/solr start | stop | restart | état
Pour la deuxième étape, exécutez ce qui suit sur une machine Ubuntu (ne sais 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é, alors voici une bonne config 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 bon d'aller, en supposant logrotate est en cours d'exécution (il est généralement).
Je répondu à cette question déjà une fois , mais cette réponse était pour les systèmes d'exploitation utilisés SysV et celui-ci est pour les nouveaux systèmes d'exploitation qui utilisent de plus en systemd .
mon autre réponse, il y a trois choses que vous devez faire ici:
- Créez le script et le mettre dans le bon endroit.
- le script de démarrage correctement au redémarrage.
- Bonus:. Faire les journaux de
systemd
persistante
1. Création du script et de le mettre dans le bon endroit
Voici un fichier unité de systemd
que vous pouvez utiliser (qui remplacent les fichiers du SysV). Nom il 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 ya une configuration là-dedans pour la mémoire de Solr. Vous aurez probablement envie de modifier cela à vos propres besoins. Si vous avez un certain nombre de variables que vous êtes de passage à systemd
, vous pouvez le faire avec la directive EnvironmentFile
.
Plus de documentation pour ces fichiers est .
2. Faire le démarrage du script correctement au démarrage
Ceci est assez simple, mais il y a des règles. Pour faire démarrer au démarrage, placez le fichier dans /etc/systemd/system/solr.service
. Vous ne pouvez pas utiliser un lien symbolique dans ce répertoire, ne pas essayer .
Une fois que c'est là-dedans, vous pouvez activer le démon d'exécuter au démarrage avec:
sudo systemctl enable solr
Et vous pouvez démarrer, arrêter, avec le statut:
sudo systemctl {start|stop|status} solr
3. Faire les journaux de systemd
persistante
Par défaut, les journaux de 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 faire persistante en créant un répertoire:
sudo mkdir -p /var/log/journal/
Et puis redémarrez le démon systemd
journalisé:
sudo systemctl restart systemd-journald
Une fois cette étape terminée, démon de journalisation systemd
recevra tous les stdout et stderr que Solr crée et elle est sauvegardée dans une format binaire sous /var/log/journal/
.
La systemd
façon gère l'exploitation forestière est assez propre et mérite d'être étudiée si vous n'êtes pas familier avec elle. En attendant, sachez juste que lire vos entrées de journal, vous aurez besoin d'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 le filtrage et les choses fondé sur la date comme ça.
3.1 Peaufiner les fichiers journaux
section Bonus! Si vous souhaitez modifier les fichiers journaux, vous pouvez lire tout en la documentation , mais les valeurs par défaut sont en fait très sûr et sain d'esprit (les journaux sont compressés par défaut, ne peut pas croître trop grand, sont taux limités et sont écrits sur le disque par lots).
Les commentaires Suivre Supermagic, puis suivez cette
http://codingrecipes.com/service-x-does-not -Support-chkconfig
Il dit:
1 – Copy your script into /etc/init.d folder 2 – cd /etc/init.d 3 – chmod +x myscript 4 – Add these lines, including #, right after #!/bin/bash or #!/bin/sh: # chkconfig: 2345 95 20 # description: Some description # What your script does (not sure if this is necessary though) # processname: myscript
Ensuite, vous pouvez faire
chkconfig --add MyScript
init.d / Solr script qui est testé sur CentOS 6 / Amazon Linux. Il enveloppe CLI natif 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 $?
Vérifier
man 5 crontab
Voyez si @reboot
est pris en charge sur le système Linux que vous utilisez.