Ceci est une ancienne révision du document !
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"
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
