Skip to content

Latest commit

 

History

History
186 lines (116 loc) · 4.04 KB

note_2016-09-10_14-22-40_systemd.md

File metadata and controls

186 lines (116 loc) · 4.04 KB

Gestion des services avec Systemd

Resources

Commandes courantes

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

Variables

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éation d'un fichier de service

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

Memo fichier de 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.

Créer un systemd utilisateur

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

Optionnel: créer un script de contrôle si nécéssaire

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