Zarządzanie usługami w systemie CentOS 7 odbywa się w ramach systemd.
systemd oferuje szerokie możliwości zarządzania zasobami systemu operacyjnego, w tym usługami. Przeanalizuj wyniki poniższych komend:
# systemctl
# systemctl list-unit-files
# systemctl list-units ssh*|dbus*
# systemctl list-units --type=target|socket|service|device
# systemctl list-units --type=socket lvm*
# systemctl [--after|before] list-dependencies sshd
# systemctl status /dev/vda
# systemctl status /tmp
W celu zapoznania się z koncepcją poziomów pracy oferowaną przez systemd wykonaj następujące polecenia:
# systemctl get-default
# ls -la /etc/systemd/system
# systemctl set-default rescue.target; reboot
# systemctl set-default multi-user.target; reboot
# systemctl default|rescue
# runlevel
# systemctl isolate rescue.target
# runlevel
# systemctl isolate multi-user
# runlevel
# systemctl is-system-running
# poweroff [--force]
# systemctl start poweroff.target
Czym różni się poziom pracy rescue od emergency?
Czym różni się zastosowanie komendy systemctl reboot
od systemctl kexec
?
Ile czasu trwa restart systemu przy zastosowaniu każdej z komend?
Poniższe komendy ilustrują sposób określania wersji jądra, która ma być użyta przy zastosowaniu drugiej z komend:
# uname -a
# kexec -l /boot/vmlinuz-3.10.0-1160.88.1.el7.x86_64 \
--initrd=/boot/initramfs-3.10.0-1160.88.1.el7.x86_64.img \
--reuse-cmdline
# systemctl kexec
Po ponownym zalogowaniu się do systemu sprawdź z jakiego jądra korzysta teraz system.
Do czego służy komenda grub2-set-default
?
Wykonaj poniższe komendy, żeby zapoznać się z zarządzaniem demonami na przykładzie sshd (można to zrobić także na maszynach wirtualnych, gdyż sesja logowania pozostaje nietknięta).
# systemctl status sshd
# systemctl stop sshd
# systemctl start sshd
# systemctl is-enabled sshd
# systemctl disable sshd
# systemctl enable sshd
Przeanalizuj zawartość pliku konfigurującego usługi sshd i utwórz usługę sshd, która będzie używała portu 2222.
# cd /etc/systemd/system
# systemctl --full edit sshd
# mv sshd.service sshd2222.service
# systemctl daemon-reload
# systemctl start sshd2222
# systemctl status sshd2222
# ss -nltp
# ssh -p 2222 192.158.142.i
Sprawdź, że można zmienić domyślny port, na którym nasłuchuje demon sshd, albo poprzez modyfikację samego pliku definiującego usługę, albo pliku /etc/sysconfig/sshd2222 pozwalającego na modyfikację opcji demona.
Przeanalizuj sposób zarządzania usługami na przykładzie vmstat.service.
Ten plik, który znajduje się w repozytorium /git/tm-scripts, należy
umieścić w katalogu /etc/systemd/system
, a następnie wykonać komendy
# systemctl daemon-reload
# systemctl cat vmstat
# systemctl status vmstat
Uruchom usługę vmstat i obserwuj komunikaty pojawiające się w dziennikach zdarzeń:
# journalctl [-x] [-fr] -u vmstat
# tail -f /var/log/messages
Co się dzieje, jeśli wykonać komendę pkill vmstat
?
Jak usługa się zachowuje, jeśli zmodyfikować jej definicję poprzez zakomentowanie
wiersza Restart=always?
W czasie wykonywania tego zadania warto dodatkowo uruchomić skrypt make-io.sh
.
Zapoznaj się z możliwościami analizy dzienników zdarzeń, jakie daje komenda journactl
:
# journalctl -u sshd
# journalctl [-x] -b [-fr] -u sshd
# journalctl -p err -u sshd
# journalctl -a --since=2019-04-12 -u sshd
# journalctl -a --until=2019-04-12 -u sshd
# journalctl --since=yesterday
# journalctl --since=2019-01-15 --until="2019-02-16 23:59:59"
# journalctl -u sshd --since=00:00 --until=9:30
# journalctl /dev/vda
# journalctl -u /tmp
# journalctl -o verbose -n -u sshd
# journalctl _UID=1000
# journalctl _COMM=sshd
# journalctl _COMM=sudo
# journalctl _HOSTNAME=polon _COMM=sshd
W jakim zakresie zwykły użytkownik (np. labul) może korzystać z komendy journalctl
?
Dodaj użytkownika labul do grupy uniksowej adm (usermod -a -G adm labul
) i sprawdź
jego uprawnienia.
Zainstaluj pakiet stress i zapoznaj się z konfiguracją usługi dla tego programu, którą można pobrać (do katalogu /etc/systemd/system) ze strony http://jkob.fizyka.umk.pl/labul/scripts/stress-cpu.service. Uruchom tę usługę, sprawdź jej status i przekonaj się, czy ustawione ograniczenia na zużycie CPU są respektowane przez planistę.
# systemctl status stress
# top
Wartość parametru CPUQuota może zostać zmieniona w czasie działania usługi:
# systemctl --runtime set-property stress CPUQuota=10%
# systemctl status stress
Wykonaj analogiczne ćwiczenia dla usługi stress-memory (http://jkob.fizyka.umk.pl/labul/scripts/stress-memory.service).
# systemctl start stress-memory
# systemctl status stress-memory
# systemctl status stress-memory
# ...
Ogranicz wielkość dostępnej pamięci dla usługi stress-memory:
# systemctl --runtime set-property vmstat.service MemoryLimit=100M
# systemctl restart stress-memory
# systemctl status stress-memory
# systemctl status stress-memory
# ...
Przeanalizuj wyniki działania komend systemd-analyze blame
oraz systemd-analyze
time
.
Zwykli użytkownicy mogą także korzystać z dobrodziejstw demona systemd
(zob. https://www.emacswiki.org/emacs/EmacsAsDaemon). Np. komenda systemctl
enable --user emacs
uruchamia zdemonizowaną wersję edytora emacs, pod
warunkiem, że w katalogu ~/.config/systemd/user utworzony zostanie plik
emacs.service z następującą zawartością:
[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon --load=~/.emacs
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment="SSH_AUTH_SOCK=%t/keyring/ssh" "LANG=pl_PL.UTF-8" "LANGUAGE=pl_PL"
Restart=on-failure
[Install]
WantedBy=default.target
Komenda systemctl start --user emacs
uruchamia tego demona, a komenda
systemctl enable --user emacs
powoduje, że demon będzie automatycznie
uruchamiany po zalogowaniu się.