J'ai créé mes propres scripts d'initialisation qui utilisent des variables :
#! /bin/sh
case "$1" in
start)
echo "Démarrage de l'API publique"
sudo -u techops sh ${JBOSS_HOME_PUBLIC_API}/bin/standalone.sh > ${PUBLICAPI_LOGGING_PATH} &
;;
stop)
echo "Arrêt de l'API publique"
sudo -u techops sh ${JBOSS_HOME_PUBLIC_API}/bin/jboss-cli.sh --connect --controller=localhost:$((9990 + $PUBLICAPI_PORT_OFFSET)) command=:shutdown > ${PUBLICAPI_LOGGING_PATH} &
;;
*)
echo "Utilisation: /etc/init.d/publicapi {start|stop}"
exit 1
;;
esac
exit 0
Les variables sont définies dans /etc/environment
et ont cet aspect :
PUBLICAPI_PORT_OFFSET=0
PUBLICAPI_LOGGING_PATH=/var/log/publicapi/publicapi.log
JBOSS_HOME_PUBLIC_API=/opt/publicapi
...et fonctionnent après la connexion, lorsque je démarre et arrête le script d'initialisation manuellement, mais elles ne fonctionnent pas pour les scripts d'initialisation au démarrage (qui sont des liens symboliques vers /etc/init.d/publicapi
dans /etc/rc2.d/
, /etc/rc5.d/
, /etc/rc6.d/
). Le démarrage échoue alors, car les variables sont inconnues.
J'ai pu corriger cela en exécutant systemctl edit publicapi
, ce qui a créé un fichier /etc/systemd/system/publicapi.service.d/local.conf
qui ressemble à ceci après que je l'ai édité :
[Unit]
Description=Script de démarrage de l'API publique
Documentation=aucune documentation
[Service]
Environment="JBOSS_HOME_PUBLIC_API=/opt/publicapi"
Environment="PUBLICAPI_PORT_OFFSET=0"
Environment="PUBLICAPI_LOGGING_PATH=/var/log/publicapi/publicapi.log"
lorsque je redémarre, le démarrage du script d'initialisation fonctionne. Mais maintenant, j'ai une situation étrange : Je dois toujours définir la variable à la fois dans /etc/systemd/system/publicapi.service.d/local.conf
et dans /etc/environment
. Si j'omets celles de /etc/environment
, les scripts de démarrage s'exécutent mais échouent, car les variables semblent ne pas être définies (du moins après la connexion). si je commente les variables dans /etc/systemd/system/publicapi.service.d/local.conf
et les définis dans /etc/environment
uniquement, les variables sont définies après la connexion, mais les scripts de démarrage ne sont pas exécutés. Que se passe-t-il ici ? Quelle est la portée de /etc/systemd/system/publicapi.service.d/local.conf
(car les valeurs ont apparemment disparu après la connexion ou peut-être ne sont pas définies) ? Comment puis-je définir les variables une seule fois de manière globale ?