{{tag>SystemD Services}}
= SystemD service - exemples
Voir aussi :
* [[SystemD service script en boucle infinie respawn]]
* [[Notes Etherpad|Etherpad Démarrage automatique avec SystemD]]
* [[RedHat accès /var/log/mariadb/mariadb.log sans être root]]
* [[pb_podman_-_podman_system_migrate|Pb podman - podman system migrate - script_palliatif]]
* [[https://unix.stackexchange.com/questions/736189/difference-between-ubuntu-systemd-simpleoneshot-and-forking|Les différents types de service SystemD]]
== 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 [[https://wiki.archlinux.org/title/Systemd_(Fran%C3%A7ais)#Fichiers_de_substitution|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