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é.
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.
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
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.
Vous devez effectuer trois étapes ici:
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).
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:
systemd
persistants.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 .
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
systemd
persistantsPar 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.
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).
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
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 $?
Vérifier
man 5 crontab
Voir si @reboot
est pris en charge sur le système Linux que vous utilisez.