Skip to content

Commit 3d9c26b

Browse files
New Crowdin updates (#1584)
* New translations view_kernel_conf.md (German) * New translations view_kernel_conf.md (French) * New translations 01-basic.md (French) * New translations cron_jobs_howto.md (Ukrainian) * New translations kde_installation.md (French) * New translations kde_installation.md (French) * New translations systemd_service_for_python_script.md (German) * New translations cron_jobs_howto.md (Italian) * New translations lab7-software_management.md (Italian) * New translations lab5-nfs.md (Italian) * New translations 11-tasks.md (French) * New translations lab5-nfs.md (Italian) * New translations 02-advanced.md (Italian) * New translations lab7-the_linux_kernel.md (Italian)
1 parent 67f9d2d commit 3d9c26b

File tree

12 files changed

+1539
-28
lines changed

12 files changed

+1539
-28
lines changed

docs/books/admin_guide/11-tasks.fr.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ Exemple :
146146
| ------ | ------------------------------------------------------------------------ |
147147
| `-e` | Modifier le fichier de planification avec vi |
148148
| `-l` | Affiche le contenu du fichier de planification |
149-
| `- u` | Nom de l'utilisateur dont le fichier de planification doit être manipulé |
149+
| `-u` | Nom de l'utilisateur dont le fichier de planification doit être manipulé |
150150
| `-r` | Supprime le fichier de planification |
151151

152152
!!! Warning "Avertissement"

docs/books/learning_ansible/01-basic.fr.md

Lines changed: 909 additions & 0 deletions
Large diffs are not rendered by default.

docs/books/learning_ansible/02-advanced.it.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ Per visualizzare una variabile, è necessario attivare il modulo `di debug` come
116116

117117
```
118118
- ansible.builtin.debug:
119-
var: "{{ service['debian'] }}"
119+
var: service['debian']
120120
```
121121

122122
È anche possibile utilizzare la variabile all'interno di un testo:
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
---
2+
title: Service `systemd` - Python Script
3+
author: Antoine Le Morvan
4+
contributors: Steven Spencer
5+
tested_with: 8.6, 9.0
6+
tags:
7+
- python
8+
- systemd
9+
- cron
10+
---
11+
12+
# `systemd` Dienst für ein Python-Skript
13+
14+
Wenn Sie wie viele Sysadmins ein Fan von Cron-Skripten sind, die mit `* * * * * * /I/launch/my/script.sh` gestartet werden, sollte dieser Artikel Sie an eine andere Möglichkeit erinnern, dies mit der ganzen Leichtigkeit des `systemd` zu tun.
15+
16+
Wir schreiben ein Python-Skript, das eine Endlosschleife zur Ausführung der von Ihnen definierten Aktionen bereitstellt.
17+
18+
Wir werden sehen, wie dieses Skript als `systemd` Dienst ausgeführt wird, wie die Protokolle in Journalctl anzeigt werden können, was passiert, wenn das Skript abstürzt.
19+
20+
## Voraussetzungen
21+
22+
Beginnen wir damit, einige Python-Abhängigkeiten zu installieren, die für das Skript benötigt werden, um das Kommando journalctl zu verwenden:
23+
24+
```
25+
shell > sudo dnf install python36-devel systemd-devel
26+
shell > sudo pip3 install systemd
27+
```
28+
29+
## Skript entwerfen
30+
31+
Lass uns das folgende Skript `my_service.py` anschauen:
32+
33+
```
34+
"""
35+
Sample script to run as script
36+
"""
37+
import time
38+
import logging
39+
import sys
40+
from systemd.journal import JournaldLogHandler
41+
42+
# Get an instance of the logger
43+
LOGGER = logging.getLogger(__name__)
44+
45+
# Instantiate the JournaldLogHandler to hook into systemd
46+
JOURNALD_HANDLER = JournaldLogHandler()
47+
JOURNALD_HANDLER.setFormatter(logging.Formatter(
48+
'[%(levelname)s] %(message)s'
49+
))
50+
51+
# Add the journald handler to the current logger
52+
LOGGER.addHandler(JOURNALD_HANDLER)
53+
LOGGER.setLevel(logging.INFO)
54+
55+
class Service(): # pylint: disable=too-few-public-methods
56+
"""
57+
Launch an infinite loop
58+
"""
59+
def __init__(self):
60+
61+
duration = 0
62+
63+
while True:
64+
time.sleep(60)
65+
duration += 60
66+
LOGGER.info("Total duration: %s", str(duration))
67+
# will failed after 4 minutes
68+
if duration > 240:
69+
sys.exit(1)
70+
71+
if __name__ == '__main__':
72+
73+
LOGGER.info("Starting the service")
74+
Service()
75+
```
76+
77+
Wir beginnen damit, die notwendigen Variablen zu instanziieren, um Logs dem Journal zu senden. Das Skript startet dann eine unendliche Schleife und pausiert für 60 Sekunden (was das Minimum einer Cron-Ausführung ist, so dass wir unter diese Grenze gehen können).
78+
79+
!!! note "Anmerkung"
80+
81+
Der Autor benutzt dieses Skript in einer fortgeschrittenen Form, die kontinuierlich eine Datenbank abfragt und Jobs basierend auf den über die Rundeck API abgerufenen Informationen ausführt
82+
83+
## Integration in Systemd
84+
85+
Jetzt, da wir ein Skript haben, das als Grundlage für Ihre Phantasie dienen kann, können wir es als System-Dienst installieren.
86+
87+
Lass uns die Datei `my_service.service` erstellen und sie nach `/etc/systemd/system/` kopieren.
88+
89+
```
90+
[Unit]
91+
Description=My Service
92+
After=multi-user.target
93+
94+
[Service]
95+
Type=simple
96+
Restart=always
97+
ExecStart=/usr/bin/python3 my_service.py
98+
WorkingDirectory=/opt/my_service/
99+
100+
StandardOutput=syslog
101+
StandardError=syslog
102+
SyslogIdentifier=my_service
103+
104+
[Install]
105+
WantedBy=multi-user.target
106+
```
107+
108+
Wie Sie sehen können, wird das Skript von `/opt/my_service/` gestartet. Denken Sie daran, den Pfad an Ihr Skript und die Syslog-Kennung anzupassen.
109+
110+
Neuen Dienst aktivieren und starten:
111+
112+
```
113+
shell > sudo systemctl daemon-reload
114+
shell > sudo systemctl enable my_service.service
115+
shell > sudo systemctl start my_service.service
116+
```
117+
118+
## Tests
119+
120+
Wir können die Protokolle jetzt via journalctl anzeigen:
121+
122+
```
123+
shell > journalctl -f -u my_service
124+
oct. 14 11:07:48 rocky8 systemd[1]: Started My Service.
125+
oct. 14 11:07:49 rocky8 __main__[270267]: [INFO] Starting the service
126+
oct. 14 11:08:49 rocky8 __main__[270267]: [INFO] Total duration: 60
127+
oct. 14 11:09:49 rocky8 __main__[270267]: [INFO] Total duration: 120
128+
```
129+
130+
Lass uns nun sehen, was passiert, wenn das Skript abgestürzt ist:
131+
132+
```
133+
shell > ps -elf | grep my_service
134+
4 S root 270267 1 0 80 0 - 82385 - 11:07 ? 00:00:00 /usr/bin/python3 my_service.py
135+
shell > sudo kill -9 270267
136+
```
137+
138+
```
139+
shell > journalctl -f -u my_service
140+
oct. 14 11:10:49 rocky8 __main__[270267]: [INFO] Total duration: 180
141+
oct. 14 11:11:49 rocky8 __main__[270267]: [INFO] Total duration: 240
142+
oct. 14 11:12:19 rocky8 systemd[1]: my_service.service: Main process exited, code=killed, status=9/KILL
143+
oct. 14 11:12:19 rocky8 systemd[1]: my_service.service: Failed with result 'signal'.
144+
oct. 14 11:12:19 rocky8 systemd[1]: my_service.service: Service RestartSec=100ms expired, scheduling restart.
145+
oct. 14 11:12:19 rocky8 systemd[1]: my_service.service: Scheduled restart job, restart counter is at 1.
146+
oct. 14 11:12:19 rocky8 systemd[1]: Stopped My Service.
147+
oct. 14 11:12:19 rocky8 systemd[1]: Started My Service.
148+
oct. 14 11:12:19 rocky8 __main__[270863]: [INFO] Starting the service
149+
```
150+
151+
Wir können auch 5 Minuten warten, bis das Skript selbst abstürzt (entfernen Sie dies für Ihre Produktion):
152+
153+
```
154+
oct. 14 11:16:02 rocky8 systemd[1]: Started My Service.
155+
oct. 14 11:16:03 rocky8 __main__[271507]: [INFO] Starting the service
156+
oct. 14 11:17:03 rocky8 __main__[271507]: [INFO] Total duration: 60
157+
oct. 14 11:18:03 rocky8 __main__[271507]: [INFO] Total duration: 120
158+
oct. 14 11:19:03 rocky8 __main__[271507]: [INFO] Total duration: 180
159+
oct. 14 11:20:03 rocky8 __main__[271507]: [INFO] Total duration: 240
160+
oct. 14 11:21:03 rocky8 __main__[271507]: [INFO] Total duration: 300
161+
oct. 14 11:21:03 rocky8 systemd[1]: my_service.service: Main process exited, code=exited, status=1/FAILURE
162+
oct. 14 11:21:03 rocky8 systemd[1]: my_service.service: Failed with result 'exit-code'.
163+
oct. 14 11:21:03 rocky8 systemd[1]: my_service.service: Service RestartSec=100ms expired, scheduling restart.
164+
oct. 14 11:21:03 rocky8 systemd[1]: my_service.service: Scheduled restart job, restart counter is at 1.
165+
oct. 14 11:21:03 rocky8 systemd[1]: Stopped My Service.
166+
oct. 14 11:21:03 rocky8 systemd[1]: Started My Service.
167+
oct. 14 11:21:03 rocky8 __main__[271993]: [INFO] Starting the service
168+
```
169+
170+
Wie Sie sehen können, ist die Neustartfunktion von systemd sehr nützlich.
171+
172+
## Fazit
173+
174+
`systemd` und `journald` stellen uns die Werkzeuge zur Verfügung, um robuste und leistungsstarke Skripte so einfach wie möglich zu machen, dass sie unsere alten zuverlässigen Crontab-Skripte ersetzen.
175+
176+
Wir hoffen, dass dieser Vorschlag für Sie nützlich sein wird.

docs/gemstones/view_kernel_conf.de.md

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
---
2+
title: Aktuelle Kernelkonfiguration anzeigen
3+
author: David Hensley
4+
contributors: Steven Spencer
5+
tested_with: 8.5
6+
tags:
7+
- kernel
8+
- config
9+
- modules
10+
- kmod
11+
---
12+
13+
# Aktuelle Kernelkonfiguration anzeigen
14+
15+
Der Linux-Kernel speichert laufende Kernelinformationen an zwei Stellen durch spezielle Dateisysteme: ([Eine Zusammenfassung von ihnen](https://www.landoflinux.com/linux_procfs_sysfs.html))
16+
17+
- Der ältere [procfs](https://man7.org/linux/man-pages/man5/procfs.5.html), der `/proc` mountet (vergewissern Sie sich über `mount -l -t proc`)
18+
- Die neueren [sysfs](https://man7.org/linux/man-pages/man5/sysfs.5.html) die `/sys` mountet (überprüfen mit `mount -l -t sysfs`)
19+
20+
!!! warning "Warnhinweis"
21+
22+
Seien Sie vorsichtig, wenn Sie die hier genannten Dateien untersuchen, Änderungen können das Verhalten des aktuellen Kernels ändern!
23+
24+
25+
Diese beiden Schnittstellen erlauben es Ihnen, die Parameter des aktuell laufenden Kernels anzuzeigen und zu ändern.
26+
27+
Beachten Sie, dass, wenn Sie auf einigen Dateien ein [`ls`](https://man7.org/linux/man-pages/man1/ls.1.html) -l ausführen, wird von diesen Dateien die Länge „0“ angezeigt, wenn Sie sie jedoch mit [`cat`](https://man7.org/linux/man-pages/man1/cat.1.html), enthalten sie tatsächlich Daten. Die meisten davon sind ASCII und editierbar, einige sind jedoch binär. In beiden Fällen Befehle wie [`file`](https://man7.org/linux/man-pages/man1/file.1.html) oder <a href= „https://man7.org/linux/man-pages/man2/lstat.2.html“>`stat`</a> gibt normalerweise nur „leere Datei“ oder „0“ für Längen zurück, obwohl sie Ihnen andere Informationen anzeigen.
28+
29+
Bevorzugte und Standardprogramme für die Interaktion mit diesen Funktionen sind [`lsmod`](https://man7.org/linux/man-pages/man8/lsmod.8.html), [`modinfo`](https://man7.org/linux/man-pages/man8/modinfo.8.html), und [`sysctl`](https://man7.org/linux/man-pages/man8/sysctl.8.html), unter anderem.
30+
31+
```bash
32+
sysctl -a | grep -i <keyword>
33+
```
34+
35+
```bash
36+
lsmod | grep -i <keyword>
37+
```
38+
39+
```bash
40+
modinfo <module>
41+
```
42+
43+
Ihre aktuelle "Kernel-Release" Version ist:
44+
45+
`uname -r` und ersetze den Rückgabewert in Befehlen durch `$(uname -r)`
46+
47+
RHEL und Derivate (Fedora, CentOS Stream, Scientific Linux, RockyLinux, Almalinux, et. al.) speichert auch die Konfiguration, die für bootbare installierte Kernel im Verzeichnis `/boot` verwendet wird, das Grub2 als ASCII-Dateien verwendet:
48+
49+
```bash
50+
/boot/config-<kernel-release>
51+
```
52+
53+
Um die aktuell laufende Kernelkonfiguration auf einen bestimmten Wert zu überprüfen:
54+
55+
```bash
56+
cat /boot/config-$(uname -r) | grep -i <keyword>
57+
```
58+
59+
Ergebnisse werden angezeigt:
60+
61+
- "=m" wenn als Kernelmodul kompiliert
62+
- "=y" wenn statisch in den Kernel kompiliert
63+
- "is not set", wenn diese Einstellung auskommentiert wurde
64+
- numerischer Wert
65+
- String-Wert
66+
67+
Einige Distributionen, wie Gentoo und Arch, verwenden das `configs` Kernelmodul um `/proc/config.gz` standardmäßig bereitzustellen:
68+
69+
```bash
70+
zcat /proc/config.gz | grep -i <keyword>
71+
zgrep <keyword> /proc/config.gz
72+
```
73+
74+
Für jede Distribution, wenn Ihr laufender Kernel sowohl `CONFIG_IKCONFIG` als auch `CONFIG_IKCONFIG_PROC` gesetzt hat und wenn
75+
76+
```bash
77+
ls -lh /sys/module/configs
78+
```
79+
80+
existiert und ist ausführbar (durchsuchbar bei einem Verzeichnis), dann können Sie `/proc/config.gz` mit diesem Befehl generieren, wenn er nicht vorhanden ist:
81+
82+
```bash
83+
modprobe configs
84+
```
85+
86+
!!! note "aktivierte Repos"
87+
88+
Dieses Dokument deckt derzeit keine Kernel-Pakete ab, die möglicherweise von Nicht-Standard-Repos stammen, wie z.B.:
89+
90+
appstream-debug, appstream-source, baseos-debug, baseos-source oder devel
91+
92+
93+
Die `kernel-devel` Pakete installieren die Konfigurationsdatei, die verwendet wird, um jedes installierte Standard-Kernel-Paket als ASCII-Datei an der folgenden Stelle zu kompilieren:
94+
95+
```bash
96+
/usr/src/kernels/<kernel-release>/.config
97+
```
98+
99+
Diese Datei wird häufiger durch einen symlinked Pfad aufgerufen, der von den `kernel-core` Paketen bereitgestellt wird:
100+
101+
```bash
102+
/lib/modules/<kernel-release>/build/ -> /usr/src/kernels/<kernel-release>/
103+
```
104+
105+
Wenn Sie `kernel-debug-devel` Pakete installiert haben, haben Sie auch dieses Verzeichnis:
106+
107+
```bash
108+
/usr/src/kernels/<kernel-release>+debug/
109+
```
110+
111+
Sie können in jedem der folgenden Informationen zu den Konfigurationswerten durchsuchen, die zum Erstellen eines installierten Kernels verwendet werden:
112+
113+
```bash
114+
/lib/modules/<kernel-release>/config
115+
/lib/modules/<kernel-release>/build/.config
116+
/usr/src/kernels/<kernel-release>/.config
117+
/usr/src/kernels/<kernel-release>+debug/.config
118+
```
119+
120+
Konfigurierte Module für den aktuell laufenden Kernel, ob kompiliert wie eingebaut (i.e., statisch in den Kernel selbst) oder ein ladbares Modul, werden von Unterverzeichnissen mit dem Namen des Moduls aufgelistet:
121+
122+
```bash
123+
/sys/module/
124+
```
125+
126+
Für jede installierte Kernel-Veröffentlichung können Sie diese Dateien überprüfen, um zu sehen, welche Werte in diesem Kernel kompiliert wurden, und welche Version von [GCC](https://man7.org/linux/man-pages/man1/gcc.1.html) verwendet wurde, um es zu kompilieren:
127+
128+
```bash
129+
cat /lib/modules/$(uname -r)/config | grep -i <keyword>
130+
```
131+
132+
```bash
133+
cat /lib/modules/$(uname -r)/build/.config | grep -i <keyword>
134+
```
135+
136+
```bash
137+
cat /usr/src/kernels/$(uname -r)/.config | grep -i <keyword>
138+
```
139+
140+
```bash
141+
cat /usr/src/kernels/$(uname -r)+debug/.config | grep -i <keyword>
142+
```
143+
144+
```bash
145+
ls -lh /sys/module/ | grep -i <keyword>
146+
```
147+
148+
Sie können in der Datei nach Abhängigkeiten des Kernelmoduls suchen:
149+
150+
```bash
151+
/lib/modules/<kernel-release>/modules.dep
152+
```
153+
154+
aber es ist einfacher, die Ausgabe des Feldes "Used-by" in [`lsmod`](https://man7.org/linux/man-pages/man8/lsmod.8.html) zu lesen oder zu parsen.
155+
156+
## Referenzen:
157+
158+
[depmod](https://man7.org/linux/man-pages/man8/depmod.8.html), [ls](https://man7.org/linux/man-pages/man1/ls.1.html), [lsmod](https://man7.org/linux/man-pages/man8/lsmod.8.html), [modinfo](https://man7.org/linux/man-pages/man8/modinfo.8.html), [modprobe](https://man7.org/linux/man-pages/man8/modprobe.8.html), [modules.dep](https://man7.org/linux/man-pages/man5/modules.dep.5.html), [namespaces](https://man7.org/linux/man-pages/man7/namespaces.7.html), [procfs](https://man7.org/linux/man-pages/man5/procfs.5.html), [sysctl](https://man7.org/linux/man-pages/man8/sysctl.8.html), [sysfs](https://man7.org/linux/man-pages/man5/sysfs.5.html), [uname](https://man7.org/linux/man-pages/man8/uname26.8.html)

0 commit comments

Comments
 (0)