Je ne veux pas faire le bon choix en créant un nouveau script systemd, je veux simplement que mon ancien script init fonctionne à nouveau maintenant que j'ai mis à niveau mon système vers un système d'exploitation utilisant systemd.
J'ai brièvement cherché à convertir des scripts d'initialisation et à écrire des scripts systemd, mais je suis certain que l'apprendre correctement et bien le faire me prendrait plusieurs heures.
La situation actuelle est la suivante:
systemctl start solr
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.
Et:
sudo service solr start
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.
En ce moment, je veux juste retourner au travail. Quelle est la voie de la moindre résistance pour que cela fonctionne à nouveau?
Mises à jour
Je ne voulais pas comprendre tout cela - je ne le savais vraiment pas - mais je dois le faire et j'ai découvert mon premier indice:
sudo systemctl enable solr
Synchronizing state for solr.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d solr defaults
insserv: warning: script 'K01solr' missing LSB tags and overrides
insserv: warning: script 'solr' missing LSB tags and overrides
Executing /usr/sbin/update-rc.d solr enable
update-rc.d: error: solr Default-Start contains no runlevels, aborting.
La page incompatibilités de systemd indique que:
Les informations de dépendance d'en-tête LSB sont importantes. Les implémentations SysV sur de nombreuses distributions n’utilisaient pas les informations de dépendance codées dans les en-têtes de script d’initialisation LSB, ni de manière très limitée. Pour cette raison, ils sont souvent incorrects ou incomplets. systemd cependant interprète pleinement ces en-têtes et les suit de près au moment de l'exécution
Je pense que cela signifie que mon script ne fonctionnera pas tant que ce ne sera pas corrigé.
Le script en question:
#!/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
# 4. $INSTALL_ROOT must be set
# 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..."
# Reset ulimit or else get issues with too many open files (https://issues.apache.org/jira/browse/SOLR-4)
ulimit -n 10000
# start daemon
daemon --chdir='/usr/local/solr/example' --command "java -jar -server start.jar -DINSTALL_ROOT=$INSTALL_ROOT" --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)
stop
sleep 15
start
;;
*)
echo $"Usage: solr {start|status|stop|restart}"
exit 3
;;
esac
exit $RETVAL
Réponses:
Sérieusement, un fichier unité systemd est facile à écrire pour un service comme celui-ci ... ou pour la plupart des services.
Cela devrait vous amener environ 95% du chemin. Mettez ceci dans, par exemple,
/etc/systemd/system/solr.service
Notez ce qui ne se trouve pas ici, comme le fichier journal, etc. systemd va automatiquement capturer et consigner la sortie du service sous le nom du service.
la source
systemd
a quelques bizarreries, comme ce script n'aura pas de journaux persistants à moins que vous ne l'activiez. En fin de compte, cela fonctionne bien et votre effort était ce dont j'avais besoin, merci.Pour moi, il était plus simple d'ajouter simplement le bloc d'informations init dans l'en-tête, comme suggéré ici :
Ensuite, exécutez
sudo systemctl enable solr
.la source
"contains no runlevels, aborting"
erreur infâme ) jusqu'à ce que je m'en rende compte: un troisième # manquant dans votre deuxième ligne (cela devrait être### BEGIN INIT INFO
). Je parie que cela expliquerait aussi pourquoi vous avez si peu de votes aussi.Une autre solution consiste à utiliser le script init solr hérité avec systemd:
la source
Il est plus pratique d'exécuter Solr à l'aide du script de démarrage fourni .
Le fichier unité de systemd ressemble à ceci:
Notez que vous pouvez également utiliser vos variables d'environnement en ajoutant
EnvironmentFile
à la[Service]
section. Le scriptbin/solr
respecte les variables d'environnement, jetez-y un coup d'œil.la source
Testé sur Debian: Ajoutez '_SYSTEMCTL_SKIP_REDIRECT = OHYES' au début du script.
Les fans de Systemd pourraient ne pas l’aimer mais bon, je n’aime pas systemd, alors là :).
la source
SYSTEMCTL_SKIP_REDIRECT=true
en redhat_
(underscore) avantSYSTEMCTL
, comme ceci:_SYSTEMCTL_SKIP_REDIRECT=1
. Si vous essayez cela depuis la ligne de commande, vous devez également exporter cette variable.J'ai eu la même erreur en essayant d'utiliser un script d'initialisation LSB sur CentOS 7. La cause fondamentale était que le script était un lien symbolique. Une fois remplacé par une copie de l'original, tout a bien fonctionné.
la source