Table des matières

,

SystemD service - exemples

Voir aussi :

Diagnostic d'un service

Source : https://wiki.archlinux.org/title/Systemd_(Fran%C3%A7ais)#Diagnostic_d'un_service

Si un service systemd se comporte mal ou si vous souhaitez obtenir plus d'informations sur ce qui se passe, définissez la SYSTEMD_LOG_LEVEL {[variable d'environnement]] à SYSTEMD_LOG_LEVEL. [à debug. Par exemple, pour exécuter le daemon systemd-networkd en mode débogage :

Ajoutez un Fichiers de substitution pour le service en ajoutant les deux lignes :

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Ou comme équivalent, définissez la variable d'environnement manuellement :

# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd

puis redémarrer systemd-networkd et regarder le journal du service avec l'option -f/--follow.

Exemple conf

Exemple conf proxy

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
# Environment="HTTP_PROXY=http://192.168.56.1:3128/" "HTTPS_PROXY=http://192.168.56.1:3128/" "NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,docker-1"
Environment="ALL_PROXY=http://192.168.56.1:3128/" "NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,docker-1"
systemctl daemon-reload
systemctl show --property=Environment docker
systemctl restart docker

Désactiver un service si un fichier est présent

/lib/systemd/system/systemd-timesyncd.service.d/disable-with-time-daemon.conf

[Unit]
# don't run timesyncd if we have another NTP daemon installed
#ConditionFileIsExecutable=!/usr/sbin/VBoxService

Arguments utiles

Environment=NODE_ENV=production

Command systemd-run

https://blog.octo.com/5-services-que-systemd-ma-deja-rendu/

#systemd-run --user
systemd-run --on-active=10 /bin/bash -c "echo 'Bip!' >>'/var/log/spoutnik.log'

https://wiki.archlinux.org/index.php/Systemd/Timers

systemd-run --on-active="12h 30m" --unit someunit.service

https://www.systutorials.com/docs/linux/man/1-systemd-run/

systemd-run -p BlockIOWeight=10 updatedb
systemd-run --on-active=30 --timer-property=AccuracySec=100ms /bin/touch /tmp/foo

Exemple

Exemple 1

Source : https://confluence.atlassian.com/confkb/run-confluence-as-a-systemd-service-on-linux-937177781.html

touch /lib/systemd/system/confluence.service
chmod 664 /lib/systemd/system/confluence.service
vi /lib/systemd/system/confluence.service

/lib/systemd/system/confluence.service

[Unit]
Description=Confluence
After=network.target
 
[Service]
Type=forking
User=confluence
PIDFile=/opt/atlassian/confluence/work/catalina.pid
ExecStart=/opt/atlassian/confluence/bin/start-confluence.sh
ExecStop=/opt/atlassian/confluence/bin/stop-confluence.sh
TimeoutSec=200
LimitNOFILE=2048
LimitNPROC=2048
 
[Install]
WantedBy=multi-user.target

Vérif syntax

systemd-analyze verify /lib/systemd/system/confluence.service
systemctl daemon-reload
systemctl enable confluence.service
systemctl start confluence.service
systemctl status confluence.service

Exemple 2

https://wiki.archlinux.org/index.php/Advanced_Format

/etc/systemd/system/lcc_fix.service

[Unit]
Description=WDIDLE3
 
[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -J 300 --please-destroy-my-drive /dev/sdX
TimeoutSec=0
StandardInput=tty
RemainAfterExit=yes
UMask=006
 
[Install]
WantedBy=multi-user.target

Exemple 3

Source : https://fabianlee.org/2017/05/21/golang-running-a-go-binary-as-a-systemd-service-on-ubuntu-16-04/

/lib/systemd/system/sleepservice.service

[Unit]
Description=Sleep service
ConditionPathExists=/home/ubuntu/work/src/sleepservice/sleepservice
After=network.target
 
[Service]
Type=simple
User=sleepservice
Group=sleepservice
LimitNOFILE=1024
 
Restart=on-failure
RestartSec=10
startLimitIntervalSec=60
 
WorkingDirectory=/home/ubuntu/work/src/sleepservice
ExecStart=/home/ubuntu/work/src/sleepservice/sleepservice --name=foo
 
# make sure log directory exists and owned by syslog
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/log/sleepservice
ExecStartPre=/bin/chown syslog:adm /var/log/sleepservice
ExecStartPre=/bin/chmod 755 /var/log/sleepservice
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=sleepservice
 
[Install]
WantedBy=multi-user.target

Exemple 4 - SystemD appelant un script sysV init

Exemple avec SonarQube

/etc/systemd/system/sonar.service

[Unit]
Description=Sonar 6
After=network.target network-online.target
Wants=network-online.target
 
[Service]
ExecStart=/home/sonar/sonarqube-6.7.1/bin/linux-x86-64/sonar.sh start
ExecStop=/home/sonar/sonarqube-6.7.1/bin/linux-x86-64/sonar.sh stop
ExecReload=/home/sonar/sonarqube-6.7.1/bin/linux-x86-64/sonar.sh restart
PIDFile=/home/sonar/sonarqube-6.7.1/bin/linux-x86-64/./SonarQube.pid
Type=forking
User=sonar
 
[Install]
WantedBy=multi-user.target

Exemple Jenkins slave agent

Jenkins-agent.service

[Unit]
Description=Jenkins Service
Wants=network.target
After=network.target
 
[Service]
ExecStart=/usr/bin/java -jar /home/user1/slave2.jar -jnlpUrl http://jenkins:8080/computer/SERVER01/slave-agent.jnlp
User=user1
Restart=always
 
[Install]
WantedBy=multi-user.target

Exemple Postgres

/usr/local/lib/systemd/system/postgres_plop_rct.service

[Unit]
Description=postgresql_plop_rct_service
After=network.target
AssertPathExists=!/etc/noprod
 
[Service]
Type=forking
User=postgres
 
#Disable OOM kill on postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0
 
WorkingDirectory=/tools/list/postgres/script/bin
ExecStart=/tools/list/postgres/script/bin/rc_postgres.ksh start plop_rct
ExecStop=/tools/list/postgres/script/bin/rc_postgres.ksh stop plop_rct
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-abort
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
 
[Install]
WantedBy=multi-user.target

Exemple AAP - Tirer des dépendances seulement

/etc/systemd/system/automation-controller.service

[Unit]
Description=Automation Controller service
After=network.target redis.service  nginx.service supervisord.service receptor.service
Wants=redis.service  nginx.service supervisord.service receptor.service
 
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
 
[Install]
WantedBy=multi-user.target

Exemple iptables-service de RedHat

/usr/lib/systemd/system/iptables.service

[Unit]
Description=IPv4 firewall with iptables
After=syslog.target
AssertPathExists=/etc/sysconfig/iptables
 
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/libexec/iptables/iptables.init start
ExecReload=/usr/libexec/iptables/iptables.init reload
ExecStop=/usr/libexec/iptables/iptables.init stop
Environment=BOOTUP=serial
Environment=CONSOLETYPE=serial
StandardOutput=syslog
StandardError=syslog
 
[Install]
WantedBy=basic.target

/usr/libexec/iptables/iptables.init

#!/bin/bash
#
# iptables      Start iptables firewall
#
# chkconfig: 2345 08 92
# description:  Starts, stops and saves iptables firewall
#
# config: /etc/sysconfig/iptables
# config: /etc/sysconfig/iptables-config
#
### BEGIN INIT INFO
# Provides: iptables
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop iptables firewall
# Description: Start, stop and save iptables firewall
### END INIT INFO
 
# Source function library.
. /etc/init.d/functions
 
#------------------------------------------------
 
case "$1" in
    start)
        [ -f "$VAR_SUBSYS_IPTABLES" ] && exit 0
        start
        RETVAL=$?
        ;;
    stop)
        [ "x$IPTABLES_SAVE_ON_STOP" = "xyes" ] && save
        stop
        RETVAL=$?
        ;;
    restart|force-reload)
        restart
        RETVAL=$?
        ;;
    reload)
        [ -e "$VAR_SUBSYS_IPTABLES" ] && reload
        RETVAL=$?
        ;;
    condrestart|try-restart)
        [ ! -e "$VAR_SUBSYS_IPTABLES" ] && exit 0
        restart
        restart
        RETVAL=$?
        ;;
    status)
        status
        RETVAL=$?
        ;;
    panic)
        set_policy DROP
        RETVAL=$?
        ;;
    save)
        save
        RETVAL=$?
        ;;
    *)
        echo $"Usage: ${IPTABLES} {start|stop|reload|restart|condrestart|status|panic|save}"
        RETVAL=2
        ;;
esac
 
exit $RETVAL

Exemple Nagios

nagios4.service

[Unit]
Description=nagios4
Documentation=man:nagios4
 
[Service]
Environment=NAGIOSCFG="/etc/nagios4/nagios.cfg"
EnvironmentFile=/etc/default/nagios4
ExecStartPre=sh -c 'nagiospipe=$$(sed -n "s/^command_file=\\(.*\\)/\\1/p" ${NAGIOSCFG}); [ -z "$${nagiospipe}" -o ! -e "$${nagiospipe}" ] || rm -f "$${nagiospipe}"'
ExecStart=/usr/sbin/nagios4 ${NAGIOSCFG}
ExecStopPost=sh -c 'nagiospipe=$$(sed -n "s/^command_file=\\(.*\\)/\\1/p" ${NAGIOSCFG}); [ -z "$${nagiospipe}" -o ! -e "$${nagiospipe}" ] || rm -f "$${nagiospipe}"'
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
PIDFile=/run/nagios4/nagios.pid
 
[Install]
WantedBy=multi-user.target