Service avec systemd

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de présenter l'utilisation de service Linux avec systemd.

Exemple avec une commande php pour Symfony

Script /path/to/my/Symfony/script/myscript.sh contenant la commande php à faire tourner en continu :

#!/bin/bash
NAME=MyApp-daemon
DESC="Daemon for my Symfony App"

# Get current dir
CURRENT_DIR=`dirname $0`

# Get current env (if not provided, get "dev" default value")
APP_ENV=${APP_ENV:-dev}

LOGTREE=${CURRENT_DIR}
LOGFILE=${LOGTREE}/${NAME}-${APP_ENV}.log

echo $(date "+%F %T")" Begin of "`basename "$0"`" script." >> $LOGFILE

DAEMON="php -d display_errors=on"
DAEMON_OPTS="mysymfony:command --env=${APP_ENV}"

RUNNING=true

trap 'RUNNING=false;echo "Quit on SIGTERM" >> $LOGFILE 2>&1' SIGTERM

while [[ $RUNNING == true ]]
do
	$DAEMON /path/to/my/Symfony/App/bin/console $DAEMON_OPTS >> $LOGFILE 2>&1
	sleep 2
done

echo $(date "+%F %T")" End of "`basename "$0"`" script." >> $LOGFILE

Nouveau fichier de service /usr/lib/systemd/system/mysymfonyapp.service dont le contenu est le suivant :

[Unit]
Description=My Symfony App envTest Daemon
After=network-online.target
# Interval de temps en seconde(s) pendant lequel le service est autorisé à redémarrer "StartLimitBurst" fois
StartLimitIntervalSec=30
# Nombre de fois que le service est autorisé à redémarrer pendant l'interval de "StartLimitIntervalSec" seconde(s)
StartLimitBurst=1
 
[Service]
Type=simple
Environment="APP_ENV=envtest"
PIDFile=/var/run/EXTPRO-DAEMON-envtest.pid
Restart=always
WorkingDirectory=/path/to/my/Symfony/script

User=webuser
Group=webgroup
UMask=007
 
ExecStart=/path/to/my/Symfony/script/myscript.sh
ExecStop=/bin/kill -15 $MAINPID
 
[Install]
WantedBy=multi-user.target

Prise en charge de la modification avec :

systemctl daemon-reload

Activation du service au démarrage :

systemctl enable mysymfonyapp.service

Désactivation du service au démarrage :

systemctl disable mysymfonyapp.service

Lancement du service :

systemctl start mysymfonyapp.service

Arrêt du service :

systemctl stop mysymfonyapp.service

Relance du service (attention, limite de relance à 1 toutes les 30 secondes) :

systemctl restart mysymfonyapp.service