- Service générique docker compose: https://gist.github.com/mosquito/b23e1c1e5723a7fd9e6568e5cf91180f
Commandes courantes:
$ sudo systemctl start etherpad.service
$ sudo systemctl stop etherpad.service
$ sudo systemctl enable etherpad.service
$ sudo systemctl disable etherpad.service
$ sudo systemctl daemon-reload
Toutes les commandes peuvent être éxécutées avec l'option --user
Les variables standard comme $HOME ne sont pas utilisables dans les paramètres du services.
Pour $HOME, utiliser %h
Voir: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers
Créer un fichier de service:
$ sudo vim /lib/systemd/system/etherpad.service
[Unit]
Description=Etherpad
[Service]
User=etherpad
Environment=NODE_ENV=production
ExecStart=/opt/etherpad-lite/etherpad-ctl start
ExecStop=/opt/etherpad-lite/etherpad-ctl stop
ExecReload=/opt/etherpad-lite/etherpad-ctl reload
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
Redémarrer le daemon systemd:
$ sudo systemctl daemon-reload
Activer le service et le démarrer:
$ sudo systemctl start etherpad.sevice
$ sudo systemctl enable etherpad.service
Déclarer des variables d'environement:
# Client Env Vars
Environment=ETCD_CA_FILE=/path/to/CA.pem
Environment=ETCD_CERT_FILE=/path/to/server.crt
Utiliser un fichier de variables d'environement:
[Service]
EnvironmentFile=/etc/kubernetes/config
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_MASTER \
$KUBE_PROXY_ARGS
Exécuter une commande avant lancement:
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests
Liste des niveaux d'éxecution:
poweroff.target - runlevel0.target Arrêt du système.
rescue.target - runlevel1.target Mode utilisateur unique, mode maintenance.
multi-user.target - runlevel3.target Mode multi-utilisateur non graphique.
multi-user.target - runlevel2.target - runlevel4.target Modes multi-utilisateur non graphiques, adaptés aux besoins des distributions.
graphical.target - runlevel5.target Mode multi-utilisateur graphique.
reboot.target - runlevel6.target Redémarrage du système
emergency.target Shell d'urgence, avec système de fichiers monté en lecture seule. Plus radical que rescue.
Peut être placé dans:
/usr/lib/systemd/user/ pour les unités fournis par des paquets.
/etc/systemd/user/ pour les unités systèmes installés par l'administrateur du système.
~/.config/systemd/user/ pour les unités de l'utilisateur.
Exemple:
$ vim ~/.config/systemd/user/conky.service
[Unit]
Description=Conky
[Service]
Type=simple
ExecStart=/usr/bin/conky
Environment=DISPLAY=:0
Restart=always
RestartSec=2
[Install]
WantedBy=default.target # Attention, les target ne sont pas les mêmes
Activation:
$ systemctl --user enable conky
$ systemctl --user start conky
Créer un script pour démarrer / arrêter le service:
$ vim /opt/etherpad-lite/etherpad-ctl
#!/bin/bash
# Author: Rémi Passmoilesel <remi.passmoilesel@gmail.com>
# Get function from functions library
# . /etc/init.d/functions
PATH="$PATH:/opt/nodejs4/bin/"
do_start() {
echo "Starting Etherpad ..."
/opt/etherpad-lite/bin/run.sh --root
PID=$(pgrep -f '/opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js')
echo "Process ID: $PID"
}
do_stop() {
echo "Stopping Etherpad ..."
PID=$(pgrep -f '/opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js')
kill "$PID"
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart|reload|condrestart)
do_stop
do_start
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
Puis rendre le script éxecutable:
$ chmod +x /opt/etherpad-lite/etherpad-ctl