mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

598 lines
18 KiB

4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
1 year ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
  1. ---
  2. categories: system sysadmin
  3. title: Howto systemd
  4. ...
  5. * Documentation : <https://www.freedesktop.org/software/systemd/man/systemd.service.html>
  6. * Manpages : <https://www.freedesktop.org/software/systemd/man/>
  7. [systemd](https://www.freedesktop.org/wiki/Software/systemd/) est un gestionnaire de services (le fameux démon avec le PID 1) en alternative au System V. Il est installé par défaut depuis Debian 8. Son utilisation a suscitée des débats au sein de l'équipe, mais nous l'utilisons sur tous nos serveurs en Debian 8.
  8. ## Utilisation de base
  9. ### Statut systemd
  10. Afficher le statut :
  11. ~~~
  12. # systemctl status
  13. ~~~
  14. Lister les unités qui tournent :
  15. ~~~
  16. # systemctl
  17. # systemctl list-units
  18. ~~~
  19. Lister les unités en échecs :
  20. ~~~
  21. # systemctl --failed
  22. ~~~
  23. Lister les unités installées :
  24. ~~~
  25. # systemctl list-unit-files
  26. ~~~
  27. > *Note* : Les unités sont par défaut dans `/usr/lib/systemd/system/` et `/etc/systemd/system/` (gestion manuelle)
  28. ### Gestion des unités
  29. <https://www.freedesktop.org/software/systemd/man/systemd.unit.html>
  30. Démarrer/arrêter/redémarrer une unité :
  31. ~~~
  32. # systemctl start <unité>
  33. # systemctl stop <unité>
  34. # systemctl restart <unité>
  35. ~~~
  36. Recharger la configuration d'une unité :
  37. ~~~
  38. # systemctl reload <unité>
  39. ~~~
  40. Afficher le statut d'une unité :
  41. ~~~
  42. # systemctl status <unité>
  43. # systemctl status <unité> -l
  44. ~~~
  45. Savoir si une unité est activée ou non :
  46. ~~~
  47. # systemctl is-enabled <unité>
  48. ~~~
  49. > *Note* : Attention, pour les pseudo-unités (qui sont en fait des scripts dans `/etc/init.d/`), `is-enabled` ne fonctionne pas.
  50. Activer/désactiver une unité au boot :
  51. ~~~
  52. # systemctl enable <unité>
  53. # systemctl disable <unité>
  54. ~~~
  55. Masquer/démasquer une unité (_mask_ rend impossible tout stop/start/…) :
  56. ~~~
  57. # systemctl mask <unité>
  58. # systemctl unmask <unité>
  59. ~~~
  60. Afficher la man page correspondante au service de l'unité :
  61. ~~~
  62. # systemctl help <unité>
  63. ~~~
  64. Recharger systemd pour prendre en compte les unités modifiées :
  65. ~~~
  66. # systemctl daemon-reload
  67. ~~~
  68. Lister les unités en état « failed » :
  69. ~~~
  70. # systemctl --failed --all
  71. ~~~
  72. Oublier l'état « failed » pour une unité ou l'ensemble des unités :
  73. ~~~
  74. # systemctl reset-failed
  75. # systemctl reset-failed <unité>
  76. ~~~
  77. ### Redémarrer ou éteindre un serveur
  78. Avec systemd, les commandes halt/poweroff/shutdown/reboot n'existent plus !
  79. Ce sont des désormais des liens symboliques vers **systemctl**.
  80. On conseille donc d'utiliser directement les commandes « natives ».
  81. Redémarrer le serveur :
  82. ~~~
  83. # systemctl reboot
  84. ~~~
  85. Éteindre et couper l'alimentation du serveur :
  86. ~~~
  87. # systemctl poweroff
  88. ~~~
  89. > *Note* : l'option `--force` permet de killer tous les process sans attendre leur extinction propre (à éviter bien sûr)
  90. ## Rédaction des unités
  91. <https://www.freedesktop.org/software/systemd/man/systemd.service.html>
  92. ### Modifier une unité
  93. ~~~
  94. # cp -a /lib/systemd/system/<service>.service /etc/systemd/system/
  95. # vim /etc/systemd/system/<service>.service
  96. # systemctl daemon-reload
  97. ~~~
  98. Exemple avec ssh.service sous Debian 8 :
  99. ~~~
  100. [Unit]
  101. Description=OpenBSD Secure Shell server
  102. After=network.target auditd.service
  103. ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
  104. [Service]
  105. EnvironmentFile=-/etc/default/ssh
  106. ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
  107. ExecReload=/bin/kill -HUP $MAINPID
  108. KillMode=process
  109. Restart=on-failure
  110. [Install]
  111. WantedBy=multi-user.target
  112. Alias=sshd.service
  113. ~~~
  114. > **Note** : Chaque fois qu'une unité est modifiée, il est nécessaire de recharger systemd avec `systemctl daemon-reload`.
  115. ### Modifier partiellement une unité
  116. Au lieu de tout ré-écrire, on peut surcharger une partie de l'unité en créant un fichier dans `/etc/systemd/system/NOM_UNITÉ.service.d/` qui précisera les modifications à faire. Exemple avec l'unité de _varnish_ on crée le fichier `/etc/systemd/system/varnish.service.d/override.conf` :
  117. ~~~
  118. [Service]
  119. ExecStart=
  120. ExecStart=/usr/sbin/varnishd -a 0.0.0.0:80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,16G -p thread_pools=8 -p thread_pool_add_delay=2 -p thread_pool_min=500 -p thread_pool_max=5000
  121. ExecReload=
  122. ExecReload=/etc/varnish/reload-vcl.sh
  123. ~~~
  124. A noter que le "ExecReload" et le "ExecReload" vides ne sont pas des erreurs mais permettent d'effacer les valeurs présentes dans l'unité par défaut avant de les réassigner.
  125. On peut directement utiliser la commande suivante pour surcharger une unité :
  126. ~~~
  127. # systemctl edit varnish
  128. ~~~
  129. On pourra ensuite lister l'unité complète vue par _systemd_ :
  130. ~~~
  131. # systemctl cat varnish
  132. ~~~
  133. A noter que cela fonctionne aussi pour les services qui n'ont pas d'unité systemd mais encore une unité sysvinit dans /etc/init.d/, on pourra par exemple mettre en place un redémarrage automatique d'un service :
  134. ~~~
  135. [Service]
  136. PIDFile=/run/service.pid
  137. Restart=always
  138. RemainAfterExit=no
  139. ~~~
  140. ## Utiliser les templates d'unités
  141. On peut créer/utiliser des templates d'unités. Cela permet de gérer à la volée des instances de services.
  142. Par exemple pour _redis_ via `/etc/systemd/system/redis@.service`.
  143. ~~~
  144. [Unit]
  145. Description=Advanced key-value store instance %i
  146. After=network.target
  147. [Service]
  148. Type=forking
  149. ExecStart=/usr/bin/redis-server /etc/redis/%i.conf
  150. ExecStartPost=/bin/chgrp %i /var/run/redis/%i.sock
  151. ExecStop=/usr/bin/redis-cli shutdown
  152. Restart=always
  153. User=redis
  154. Group=%i
  155. [Install]
  156. WantedBy=multi-user.target
  157. ~~~
  158. `%i` correspond au nom d'instance après le `@`.
  159. On pourra ensuite démarrer l'instance foo et bar avec :
  160. ~~~
  161. # systemctl start redis@foo redis@bar
  162. ~~~
  163. ## systemd par utilisateur
  164. systemd fonctionne avec le PID 1. Mais il est aussi possible de lancer des instances par utilisateur avec le paramètre `--user`. C'est très pratique pour donner les droits à un utilisateur de gérer lui-même ses services (instances _Tomcat_ par exemple).
  165. Il faut avoir le paquet `libpam-systemd` installé : une session systemd est lancée quand on est connecté à la machine :
  166. ~~~
  167. $ systemctl --user status
  168. ● bar
  169. State: running
  170. Jobs: 0 queued
  171. Failed: 0 units
  172. Since: ven. 2016-12-23 21:15:33 CET; 1 weeks 6 days ago
  173. CGroup: /user.slice/user-1001.slice/user@1001.service
  174. ├─1758 /lib/systemd/systemd --user
  175. └─1760 (sd-pam)
  176. ~~~
  177. Attention, si l'on veut une session persistante pour un utilisateur, il faut l'activer avec `loginctl` (si l'on ne fait pas cela, les services lancés via `systemctl --user` seront coupés à la déconnexion). Par exemple pour l'utilisateur _foo_ :
  178. ~~~
  179. # loginctl enable-linger foo
  180. ~~~
  181. Attention, si l'on renomme l'utilisateur foo ou que l'on change son UID, il faut supprimer son "linger" :
  182. ~~~
  183. # rm /var/lib/systemd/linger/foo
  184. ~~~
  185. L'utilisateur peut créer son unité systemd dans son */home* dans le dossier suivant :
  186. ~~~
  187. ~/.config/systemd/user/
  188. ~~~
  189. A créer si les dossier n'existe pas.
  190. Exemple d'unité utilisateur pour _Tomcat_ :
  191. `/etc/systemd/user/tomcat.service`
  192. ~~~
  193. [Unit]
  194. Description=Tomcat %u.
  195. After=network.target
  196. [Service]
  197. WorkingDirectory=/home/%u
  198. Environment="CATALINA_BASE=/home/%u/tomcat"
  199. EnvironmentFile=/home/%u/tomcat/conf/env
  200. UMask=0002
  201. ExecStart=/usr/share/tomcat7/bin/startup.sh
  202. ExecStop=/usr/share/tomcat7/bin/shutdown.sh
  203. ExecStopPost=/bin/sh -c date | /usr/bin/mail -s "%H/%u : Shutdown instance" foo@bar.com
  204. Type=forking
  205. [Install]
  206. WantedBy=default.target
  207. ~~~
  208. *Note* : il est important que `WantedBy` soit `default.target` car en mode utilisateur `multi-user.target` n'existe pas et donc le service n'est jamais démarré automatiquement.
  209. L'utilisateur pourra ainsi gérer lui-même le service :
  210. ~~~
  211. $ systemctl --user enable tomcat
  212. $ systemctl --user start tomcat
  213. $ systemctl --user status -l tomcat
  214. $ systemctl --user restart tomcat
  215. $ systemctl --user stop tomcat
  216. $ systemctl --user daemon-reload
  217. ~~~
  218. *Note* : pour pouvoir gérer `systemctl --user` via `sudo -iu foo`, on conseille de mettre dans `/etc/profile.d/systemd.sh` :
  219. ~~~
  220. export XDG_RUNTIME_DIR="/run/user/$UID"
  221. ~~~
  222. *Attention*, le fichier `/etc/profile.d/systemd.sh` doit avoir les droits 644.
  223. ## Utilisation avancée
  224. Afficher plein d'informations sur l'unité :
  225. ~~~
  226. # systemctl show <service>
  227. ~~~
  228. _Debug_ au démarrage accessible sur _tty9_ :
  229. ~~~
  230. # systemctl enable debug-shell
  231. ~~~
  232. Débug d'une unité :
  233. ~~~
  234. # systemctl stop unit
  235. # SYSTEMD_LOG_LEVEL=debug /lib/systemd/unit
  236. ~~~
  237. Analyser ce qui prend du temps au démarrage :
  238. ~~~
  239. # systemd-analyze
  240. Startup finished in 5.019s (firmware) + 6.128s (loader) + 5min 35.864s (kernel) + 20min 3.148s (userspace) = 25min 50.160s
  241. # systemd-analyze blame | head -3
  242. 2.029s systemd-udev-settle.service
  243. 1.400s docker.service
  244. 1.215s uml-utilities.service
  245. ~~~
  246. ## FAQ
  247. ### systemd et Debian 8
  248. Sous Debian 8, l'adoption de systemd est récente et de nombreuses services ont des unités mal écrites. Notamment elles ne gèrent souvent pas les options dans `/etc/default/` alors qu'un fichier est créé par défaut.
  249. On conseille alors de corriger l'unité. En général, les corrections sont intégrées en Debian 9.
  250. Exemple avec [Bind](HowtoBind) qui ne gère par les options dans `/etc/default/bind9` en Debian 8.
  251. Pour corriger il faut copier l'unité :
  252. ~~~
  253. # cp -a /lib/systemd/system/bind9.service /etc/systemd/system/
  254. ~~~
  255. et ajuster la section _[Service]_ :
  256. ~~~
  257. EnvironmentFile=-/etc/default/bind9
  258. ExecStart=/usr/sbin/named -f $OPTIONS
  259. ~~~
  260. puis :
  261. ~~~
  262. # systemctl daemon-reload
  263. ~~~
  264. ### Limiter les accès disque
  265. Ces directives ajouté dans la section Service seront appliqué au processus parent mais aussi au processus enfant. Prenons le cas de Dovecot où l'on a besoin de réduire sa priorité d'accès en lecture :
  266. ~~~
  267. cat /etc/systemd/system/dovecot.service.d/override.conf
  268. [Service]
  269. IOSchedulingClass=best-effort
  270. IOSchedulingPriority=5
  271. ~~~
  272. ### strace d'un process
  273. Avant _systemd_, une astuce efficace pour stracer un démon multi-process était de faire `strace -ff /etc/init.d/<démon> start` …mais ça n'est plus possible avec systemd : il faut désormais détecter le PID du processus père du démon pour faire un `strace -ff -p<PID>`.
  274. Exemple pour Apache, on récupère le PID, on lance le _strace_ puis on fait un _graceful_ :
  275. ~~~
  276. # pstree -pan | grep -v grep | grep apache | head -1
  277. # strace -ff -s65535 -p<PID>
  278. # apache2ctl graceful
  279. ~~~
  280. Autre astuce pour récupérer les logs "strace" dans `/tmp/strace.log` :
  281. ~~~
  282. # strace -f -o /tmp/strace.log -s 2048 -p 1 & systemctl restart <SERVICE>
  283. ~~~
  284. ### networking
  285. Sous Debian 8, le démarrage du système se bloque complètement (dead lock) si l'initialisation de process dépendant du réseau (comme NFS, NTP, firewalling…) se fait avant que le réseau soit démarré.
  286. Notamment quand ils sont démarrés via des hooks dans `/etc/network/if-*/`… Cela n'était pas bloquant avec SysV, cf <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754218#30>
  287. Contournement « bourrin » : ajouter `exit 0` dans `/etc/init.d/networking` et voir le souci via `systemctl status networking -l` ; modifier `JobTimeoutUSer` => `systemctl show networking -p JobTimeoutUSer`
  288. ### Failed to get D-Bus connection: Unknown error -1
  289. Si en utilisant `systemctl` vous obtenez une erreur "Failed to get D-Bus connection: Unknown error -1" vérifiez si vous êtes bien passé à systemd et n'êtes resté à sysvinit !
  290. ### Failed to get D-Bus connection: No such file or directory
  291. Si en tant qu'utilisateur, on obtient l'erreur :
  292. ~~~
  293. $ systemctl --user status
  294. Failed to get D-Bus connection: No such file or directory
  295. ~~~
  296. S'assurer que l'on a bien une variable d'environnement du type :
  297. ~~~
  298. XDG_RUNTIME_DIR=/run/user/1042
  299. ~~~
  300. Avec un _strace_ on devrait voir quelque chose comme :
  301. ~~~
  302. $ strace systemctl --user status
  303. connect(3, {sa_family=AF_LOCAL, sun_path="/run/user/1042/systemd/private"}, 32) = -1 ECONNREFUSED (Connection refused)
  304. connect(3, {sa_family=AF_LOCAL, sun_path="/run/user/1042/bus"}, 20) = -1 ENOENT (No such file or directory)
  305. ~~~
  306. C'est surtout le premier élément qui est intéressant. _systemd_ doit maintenir des sockets Unix fonctionnelles quand un utilisateur est logué :
  307. ~~~
  308. $ lsof | grep /run/user/1042
  309. systemd 844 foo 11u unix 0xffff88082dbb9480 0t0 69531078 /run/user/1042/systemd/notify
  310. systemd 844 foo 12u unix 0xffff88082dbb9c00 0t0 69531080 /run/user/1042/systemd/private
  311. ~~~
  312. Pour le forcer à les récréer on pourra tester dans l'ordre :
  313. * la commande `loginctl enable-linger foo` pour les rendre persistantes et voir l'effet (quitte à désactiver après)
  314. * `mv /var/lib/systemd/linger/foo /tmp` puis `loginctl enable-linger foo`
  315. * `mv /run/user/1042` puis `loginctl enable-linger foo`
  316. * redémarrer dbus : `systemctl restart dbus`
  317. * redémarrer systemd-logind : `systemctl restart systemd-logind`
  318. * stopper tous les process de l'utilisateur (voir avec lsof) puis se loguer "proprement" avec ssh ou login (et non pas sudo ou su)
  319. Cas d'une installation non standard, tel un container, vérifiez que vous avez bien accès à `/dev`. On peut le vérifier avec dbus-launch.
  320. ~~~
  321. foo@bar:~$ dbus-launch
  322. Failed to open /dev/null: Permission denied
  323. ~~~
  324. Parfois avec OpenVZ, les containers sont démarrés avec `/dev` en 700.
  325. ### Please remove executable permission bits
  326. Contrairement à SysVinit, les unités systemd sont des fichiers de configurations et non des éxécutables, les droits doivent donc etre en **644** pour éviter le warning suivant:
  327. ~~~
  328. Configuration file /etc/systemd/XXXX/XXXX.service is marked executable. Please remove executable permission bits. Proceeding anyway.
  329. ~~~
  330. ### systemd-fsck : Dependency failed
  331. Vous obtenez _systemd-fsck : Dependency failed for File System Check on /dev/disk/foo_ ?
  332. Par défaut, `systemd-fsck` attend 1m30 l'accès à chaque device disque. Pour diverses raisons (accès à un SAN externe, etc.) cela peut échouer, vous aurez alors :
  333. ~~~
  334. systemd[1]: Job dev-disk-by\x2dlabel-foo.device/start timed out.
  335. systemd[1]: Timed out waiting for device dev-disk-by\x2dlabel-foo.device.
  336. systemd[1]: Dependency failed for /backup.
  337. systemd[1]: Dependency failed for Local File Systems.
  338. systemd[1]: Triggering OnFailure= dependencies of local-fs.target.
  339. systemd[1]: Dependency failed for File System Check on /dev/disk/by-label/foo.
  340. ~~~
  341. Vous pouvez alors ajouter différentes options via le fstab, du type :
  342. ~~~
  343. LABEL=foo /foo ext4 defaults,nofail,x-systemd.device-timeout=120 0 0
  344. ~~~
  345. Notamment `nofail` pour éviter que cela fasse échouer votre séquence de boot !
  346. ### systemd VS systemD VS SystemD
  347. **systemd** ne prend aucune majuscule. Ce n'est pas SystemD ou systemD.
  348. ### Migrer de sysvinit à systemd
  349. Cette action peut être nécessaire lorsque l'on migre de Debian Wheezy à Jessie.
  350. ~~~
  351. # apt install systemd-sysv
  352. The following packages will be REMOVED:
  353. sysvinit-core
  354. # reboot
  355. ~~~
  356. et vérifier que GRUB ne se lance pas avec l'option `init=/lib/sysvinit/init`.
  357. ### Et les scripts dans /etc/init.d/ ?
  358. Avec systemd, pourquoi reste-t-il des scripts dans `/etc/init.d/` ?
  359. systemd prend en compte les scripts dans `/etc/init.d/` :
  360. * les scripts « classiques » sont pris en compte si il n'existe pas d'unité systemd avec le même nom (sa description commence alors par **LSB:**)
  361. * certains scripts sont juste là par compatibilité afin de pouvoir faire `/etc/init.d/foo start/stop/restart/status` mais c'est en fait l'unité systemd qui est prise en compte
  362. ### Boot bloqué pour partition inaccessible
  363. Si on modifie le partitionnement et qu'on oublie de mettre à jour le fstab, ou qu'un disque n'est plus détecté, il arrive que le démarrage soit bloqué.
  364. Au démarrage du serveur, à l'écran de boot, on choisira `e` pour "éditer" les options de démarrage. À la fin de la ligne `linux` on ajoutera `init=/bin/bash` puis on demande la suite du boot (probablement `F10`).
  365. On a alors la possibilité de remonter la partition `/` en écriture avec `mount -o remount,rw /` puis d'éditer le fstab avec `vi /etc/fstab`.
  366. Au prochain démarrage les paramètres spécifiques de grub sont oubliés et le démarrage devrait se faire sans encombre.
  367. NB : l'édition des paramètres de grub et le shell tmeporaire sont habituellement en keymap qwerty !
  368. ## Exemples d'unités
  369. ### Process Node.js géré via forever
  370. *forever* est lui-même un gestionnaire de process, mais dans certains cas c'est pertinent d'empiler les 2 gestionnaires. Voici un exemple fonctionnel (qu'on pourrait vouloir transformer en unité "user", d'ailleurs) :
  371. ~~~
  372. # /etc/systemd/system/foo_chat.service
  373. [Unit]
  374. Description=Node.js process for Foo chat
  375. After=network.target
  376. [Service]
  377. ExecStart=/usr/local/bin/forever start --pidFile /home/foo/www/foo.pid -o /home/foo/www/log/out.log -e /home/foo/www/log/err.log /home/foo/www/bin/www
  378. ExecStop=/usr/local/bin/forever stop /home/foo/www/bin/www
  379. PIDFile=/home/foo/www/foo.pid
  380. Type=forking
  381. LimitNOFILE=4096
  382. User=nod
  383. Restart=always
  384. [Install]
  385. WantedBy=default.target
  386. ~~~
  387. ### Process Java / JBoss (exemple avec wildfly)
  388. Il faut mettre les variables d’environnement java dans un fichier que l'on appelle avec la variable *EnvironmentFile=* dans l'unité systemd, voici un exemple Environment File :
  389. ~~~
  390. JBOSS_HOME=/home/wildfly/wildfly-10.1.0.Final/
  391. JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
  392. JAVA=/usr/lib/jvm/java-8-openjdk-amd64/bin/java
  393. JBOSS_LOG_DIR=/home/wildfly/wildfly-10.1.0.Final/analysis/log/
  394. JBOSS_CONFIG_DIR=/home/wildfly/wildfly-10.1.0.Final/analysis/configuration/
  395. JBOSS_CONFIG=standalone.xml
  396. MODULE_OPTS=
  397. JBOSS_MODULEPATH="/home/wildfly/wildfly-10.1.0.Final/modules"
  398. instance_name=analysis
  399. JAVA_OPTS="-server -Xms256m -Xmx2048M -XX:MetaspaceSize=192M -XX:MaxMetaspaceSize=2048m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.server.base.dir=/home/wildfly/wildfly-10.1.0.Final/analysis -Djboss.node.name=analysis -Djboss.as.management.blocking.timeout=701"
  400. ~~~
  401. Voici un exemple d'unité systemd :
  402. ~~~
  403. [Unit]
  404. Description=Jboss Application Server
  405. After=network.target
  406. [Service]
  407. Type=simple
  408. EnvironmentFile=/home/wildfly/prod_wildfly_analyses_env
  409. User=wildfly
  410. Group=wildfly
  411. ExecStart=/home/wildfly/wildfly-10.1.0.Final/bin/standalone.sh
  412. #TimeoutStartSec=600
  413. #TimeoutStopSec=600
  414. [Install]
  415. WantedBy=multi-user.target
  416. ~~~