Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Kolejny ciekawy ficzer systemd — drukarki. Chodzi to to, że standardowo usługa cupsa w systemd wygląda tak:
root:~# systemctl list-unit-files | grep cups cups.path enabled cups.service enabled cups.socket enabled
ale standardowo nie działa (po mimo faktu jej włączenia):
root:~# systemctl status cups ● cups.service - CUPS Printing Service Loaded: loaded (/lib/systemd/system/cups.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: man:cupsd(8) man:cupsd.conf(5)
oraz
root:~# lsof -i | grep cups
O co w tym wszystkim chodzi? Ano o aktywację drukarki gdy ta jest potrzebna. Generalnie są 3 różne scenariusze:
1) usługa cupsa działa nonstop, nawet jeśli drukarka nie jest podłączona lub jest wyłączona
2) cups jest odpalany gdy podłącza się drukarkę
3) cups się odpala gdy jakieś dokumenty się chce przesłać do wydruku
W moim przypadku satysfakcjonowałyby mnie te 2 ostatnie punkty, czyli by można było drukować ale bez konieczności posiadania w systemie ciągle odpalonego cupsa. W sysvinit sobie to musiałem przełączać, a tutaj na systemd? Zobaczmy co się stanie gry podłączę/włączę drukarkę:
Jan 28 21:45:12 morfikownia kernel: [ 759.173496] usb 2-1.3: new full-speed USB device number 7 using ehci-pci
Jan 28 21:45:12 morfikownia kernel: [ 759.267973] usb 2-1.3: New USB device found, idVendor=04b8, idProduct=0005
Jan 28 21:45:12 morfikownia kernel: [ 759.267984] usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jan 28 21:45:12 morfikownia kernel: [ 759.267990] usb 2-1.3: Product: USB Printer
Jan 28 21:45:12 morfikownia kernel: [ 759.267994] usb 2-1.3: Manufacturer: EPSON
Jan 28 21:45:12 morfikownia kernel: [ 759.267998] usb 2-1.3: SerialNumber: 990040006261521120
Jan 28 21:45:12 morfikownia kernel: [ 759.273747] usblp 2-1.3:1.0: usblp0: USB Bidirectional printer dev 7 if 0 alt 0 proto 2 vid 0x04B8 pid 0x0005
Jan 28 21:45:12 morfikownia mtp-probe: checking bus 2, device 7: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3"
Jan 28 21:45:12 morfikownia mtp-probe: bus: 2, device: 7 was not an MTP device
[b]Jan 28 21:45:12 morfikownia systemd[1]: Starting CUPS Printing Service...
Jan 28 21:45:12 morfikownia systemd[1]: Started CUPS Printing Service.
Jan 28 21:45:12 morfikownia systemd[1]: Starting Printer.
Jan 28 21:45:12 morfikownia systemd[1]: Reached target Printer.[/b]
Jan 28 21:45:12 morfikownia colord: Profile added: EPSON_STYLUS_COLOR_760-Gray..
Jan 28 21:45:12 morfikownia colord: Profile added: EPSON_STYLUS_COLOR_760-RGB..
Jan 28 21:45:12 morfikownia colord: Device added: cups-EPSON_STYLUS_COLOR_760[/quote]
oraz:Kod:
root:~# lsof -i | grep cups cupsd 6802 root 10u IPv4 65965 0t0 TCP localhost:ipp (LISTEN) root:~# systemctl status cups ● cups.service - CUPS Printing Service Loaded: loaded (/lib/systemd/system/cups.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2015-01-28 21:45:12 CET; 1min 23s ago Docs: man:cupsd(8) man:cupsd.conf(5) Main PID: 6802 (cupsd) CGroup: /system.slice/cups.service └─6802 /usr/sbin/cupsd -f Jan 28 21:45:12 morfikownia systemd[1]: Starting CUPS Printing Service... Jan 28 21:45:12 morfikownia systemd[1]: Started CUPS Printing Service.Co w przypadku gdy chcemy coś wydrukować ale usługa cupsa nie jest podniesiona? Wystarczy wejść w plik->drukuj i zaznaczyć odpowiednią drukarkę, a po chwili zostaną odświeżone informacje o niej:
[img]http://i.imgur.com/xHi9p3W.png[/img]
W między czasie zaś zostanie podniesiony daemon cupsa:Kod:
Jan 28 21:53:23 morfikownia systemd[1]: Starting CUPS Printing Service... Jan 28 21:53:23 morfikownia systemd[1]: Started CUPS Printing Service. Jan 28 21:53:23 morfikownia colord: Profile added: EPSON_STYLUS_COLOR_760-Gray.. Jan 28 21:53:23 morfikownia colord: Profile added: EPSON_STYLUS_COLOR_760-RGB.. Jan 28 21:53:23 morfikownia colord: Device added: cups-EPSON_STYLUS_COLOR_760 Jan 28 21:53:23 morfikownia colord: Profile added: EPSON_Stylus_COLOR_760_laptop-Gray.. Jan 28 21:53:23 morfikownia colord: Profile added: EPSON_Stylus_COLOR_760_laptop-RGB.. Jan 28 21:53:23 morfikownia colord: Device added: cups-EPSON_Stylus_COLOR_760_laptopMoże i to fajnie działa ale ma jedną wadę — przy wyłączaniu drukarki, cups nie zdycha i trzeba go ubić ręcznie. xD
Offline
Następna ciekawa rzecz -- izolowanie usług od sieci. Przykład: mamy jakąś usługę, którą chcemy odpalić i przy tym chcemy mieć pewność, że nie będzie ona się komunikować ze światem zewnętrznym. To chyba obrazuje po części problem opisany tutaj: https://forum.dug.net.pl/viewtopic.php?id=26837 .
Pewnie można by coś napisać na ten temat w firewallu ale mając do dyspozycji systemd, można to zrobić o wiele prościej. Weźmy np. qbittorrenta jako królika doświadczalnego -- standardowo po odpaleniu tej usługi, lsof prezentuje się mniej więcej tak:
# lsof -i | grep qbitt qbittorre 1465 morfik 11u IPv4 17008 0t0 TCP morfikownia.mhouse.lh:11111 (LISTEN) qbittorre 1465 morfik 12u IPv4 17009 0t0 UDP morfikownia.mhouse.lh:11111 qbittorre 1465 morfik 15u IPv4 19292 0t0 TCP *:22222 (LISTEN) qbittorre 1465 morfik 31u IPv4 455637 0t0 TCP morfikownia.mhouse.lh:51191->b152195.dynamic.ppp.asahi-net.or.jp:35062 (SYN_SENT) qbittorre 1465 morfik 44u IPv4 409176 0t0 TCP morfikownia.mhouse.lh:51282->d58-106-200-199.bla801.nsw.optusnet.com.au:6881 (ESTABLISHED) qbittorre 1465 morfik 45u IPv4 456041 0t0 TCP morfikownia.mhouse.lh:11111->client.yota.ru:52670 (ESTABLISHED) qbittorre 1465 morfik 50u IPv4 455758 0t0 TCP morfikownia.mhouse.lh:51161->128-68-160-68.broadband.corbina.ru:22607 (SYN_SENT) qbittorre 1465 morfik 52u IPv4 438759 0t0 TCP morfikownia.mhouse.lh:11111->37.131.65.253:7120 (ESTABLISHED) qbittorre 1465 morfik 53u IPv4 456104 0t0 TCP morfikownia.mhouse.lh:51228->5249E0D9.cm-4-2d.dynamic.ziggo.nl:56827 (SYN_SENT) qbittorre 1465 morfik 55u IPv4 455856 0t0 TCP morfikownia.mhouse.lh:51184->pha22-1-78-247-88-25.fbx.proxad.net:6958 (SYN_SENT) ...
Jeśli teraz dodamy do pliku unitu opcję
PrivateNetwork=yes
i zresetujemy usługę, to zobaczymy:
# lsof -i | grep qbitt
Pusto. xD Mimo, że sam qbittorrent zwraca:
Jan 28 23:54:32 morfikownia systemd[1]: Stopping qbittorrent-nox... Jan 28 23:54:35 morfikownia systemd[1]: Starting qbittorrent-nox... Jan 28 23:54:35 morfikownia systemd[1]: Started qbittorrent-nox. Jan 28 23:54:36 morfikownia qbittorrent-nox[45921]: ******** Information ******** Jan 28 23:54:36 morfikownia qbittorrent-nox[45921]: To control qBittorrent, access the Web UI at http://localhost:22222 Jan 28 23:54:36 morfikownia qbittorrent-nox[45921]: The Web UI administrator user name is: morfik Jan 28 23:54:36 morfikownia qbittorrent-nox[45921]: 28/01/2015 23:54:36 - The Web UI is listening on port 22222
Jeśli spróbować wywołać nawet ten adres panelu www, to i tak się dostaje "Unable to connect". Poza tym brakuje tam wpisów typu:
Jan 29 00:02:49 morfikownia qbittorrent-nox[48172]: 29/01/2015 00:02:49 - qBittorrent is successfully listening on interface 192.168.1.150 port: TCP/11111 Jan 29 00:02:49 morfikownia qbittorrent-nox[48172]: 29/01/2015 00:02:49 - External IP: xa.xa.xa.xa
Jeśli się wywołuje usługę z opcją PrivateNetwork=yes , nie są dla niej widoczne żadne interfejsy sieciowe, poza oczywiście lo ale to też nie jest ten lo hosta, tylko jakiś wirtualny i kompletnie odseparowany. Zatem jeśli chcemy mieć pewność, że dana usługa nie komunikuje się ze światem, wystarczy dopisać do niej powyższy parametr i problem solved, xD
Ostatnio edytowany przez morfik (2015-01-29 00:03:49)
Offline
1509
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:08:28)
Offline
Testuję sobie właśnie ten wbudowany w systemd mechanizm synchronizacji czasu, chodzi o:
root:~# timedatectl status Local time: Fri 2015-01-30 09:02:20 CET Universal time: Fri 2015-01-30 08:02:20 UTC RTC time: Fri 2015-01-30 08:02:20 Time zone: Europe/Warsaw (CET, +0100) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: no Last DST change: DST ended at Sun 2014-10-26 02:59:59 CEST Sun 2014-10-26 02:00:00 CET Next DST change: DST begins (the clock jumps one hour forward) at Sun 2015-03-29 01:59:59 CET Sun 2015-03-29 03:00:00 CEST
Już pominę fakt, że widać, kiedy jest zmiana czasu. xD Chodzi głównie o ten NTP, bo jakby nie patrzeć, nie mam u siebie wgranego żadnego pakietu z ntp. Za wszystko odpowiada usługa systemd-timesyncd.service , którą się konfiguruje via /etc/systemd/timesyncd.conf :
[Time] NTP=0.pl.pool.ntp.org 1.pl.pool.ntp.org 2.pl.pool.ntp.org 3.pl.pool.ntp.org FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
Po aktywacji, system zaczyna synchronizować czas ale to też w ciekawy sposób:
Jan 30 08:27:43 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 64s/-0.013s/0.020s/0.005s/+397ppm Jan 30 08:28:47 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 128s/-0.032s/0.021s/0.014s/+274ppm Jan 30 08:30:55 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 128s/-0.051s/0.018s/0.046s/+74ppm Jan 30 08:33:04 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 256s/-0.024s/0.020s/0.043s/+27ppm Jan 30 08:37:20 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 512s/-0.036s/0.021s/0.039s/-7ppm Jan 30 08:45:52 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 512s/-0.056s/0.023s/0.034s/-62ppm Jan 30 08:54:24 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 1024s/-0.022s/0.020s/0.030s/-73ppm Jan 30 09:11:29 morfikownia systemd-timesyncd[34930]: interval/delta/delay/jitter/drift 2048s/-0.023s/0.021s/0.025s/-79ppm
Jak widać, odstępy między kolejnymi synchronizacjami zwiększają się, aż do osiągnięcia maksymalnych 2048sekund (34min). Nie wiem jaki jest cel takiego rozwiązania ale jeśli się przyjrzeć, to z jakichś powodów czasem czas (xD) nie ulega podwojeniu. Być może mają coś wspólnego z tym te cyferki, tylko co? xD
W każdym razie jeśli chodzi o czas, to chciałem nadać temu procesowi od synchronizacji wyższy priorytet i tu z początku wystąpił problem -- jak niby to zrobić no bo raczej nie przez:
# nice -n -20 ionice -n 0 -c 1
Poszukałem i znalazłem. Oczywiście chodzi o parametry unitów, a yych dotyczących priorytetów jest z 10 i są tam miedzy innymi te 3, które widać wyżej i działa to dokładnie na takiej samej zasadzie co powyższa linijka, z tym, że procesy nie są wywoływane na zasadzie, że pierw odpala się nice, którego proces przybiera określony priorytet, potem wywołuje proces potomny, który dziedziczy ten priorytet i ustawia priorytet dla IO i wywołuje następny proces potomny, który dziedziczy oba te priorytety. xD Tu jest tylko jeden proces z założonymi już priorytetami.
Poniżej są te 3 parametry:
Nice=-20 IOSchedulingClass=1 IOSchedulingPriority=0
Nice przybiera wartości od -20 do 19, IOSchedulingClass od 0 do 3, a IOSchedulingPriority od 0 do 7 . Wszędzie im niższy numer tym większy priorytet. Cała filozofia. xD
No to teraz sobie wyprofiluje system, bo jakby nie patrzeć to ile razy nadawaliście skryptom init priorytety? A ile razy nadpisała wam to aktualizacja pakietu? xD
Ostatnio edytowany przez morfik (2015-01-30 09:30:01)
Offline
Właśnie skończyłem się bawić watchdogiem — fajna zabawka. xD
W systemd są dwa dogi — jeden nadzorujący pracę systemd, drugi zaś nadzoruje pracę wszystkich odpalonych usług. Pierwszy z nich musi być sprzętowy, tj. w systemie musi być urządzenie /dev/watchdog ale zwykle wszystkie nowe sprzęty go posiadają, także nie powinno być problemów — jak coś to sprawdzić poleceniem: wdctl .Włączamy watchdoga dla systemd via plik /etc/systemd/system.conf :
RuntimeWatchdogSec=20 ShutdownWatchdogSec=10min
Pierwsza opcja to interwał pingu wysyłanego przez systemd do tego urządzenia /dev/watchdog i systemd będzie przesyłał pingi w odstępach równych połowie tego czasu. Jeśli ping nie pojawi się do końca tego czasu, maszyna zostanie zresetowana.
Sprawdziłem, działa. xD Jak coś to można w terminalu wpisać:
:(){ :|:& };:
Kernel ma co prawda opcję resetowania systemu ale tylko na wypadek kernel panic albo jakiegoś OOM i raczej przy powieszeniu się inita, ten mechanizm nie zadziała. A watchdog ładnie zresetował system.
Także jeden dog z głowy, teraz drugi.
Podobnie jak w przypadku tego pierwszego, tego doga też trzeba aktywować — po jednym na usługę. Do pliku usługi zaś trzeba dodać kilka parametrów:
WatchdogSec=30s Restart=on-failure StartLimitInterval=2min StartLimitBurst=3 StartLimitAction=reboot-force
W skrócie, ping do watchdoga co 30s, w przypadku nie otrzymania pingu od usługi, nastąpi zresetowanie usługi. Jeśli wystąpią 3 resety usługi w ciągu 2 min, nastąpi zresetowanie PC w trybie agresywnym, tj zostaną odmontowane dyski i część usług zostanie ubita, jeśli coś się zawiesi, to zostanie siłowo ubite. Usługa się będzie resetować w odstępach 30s, czyli tyle ile jest wpisane w pierwszej linijce.
No ok ale co z tego za pożytek, skoro jedyną opcją jaką można wybrać jest zresetowanie komputera (tylko sposób do wyboru)? Można by zaprogramować pc by ten się zresetował, np. jeśli [s]policja[/s] złodziej go chce ukraść. xD
Można dorobić np. taką linijkę do tego powyżej:
ExecStart=/bin/ping -i 10 8.8.8.8
Czyli co 10s odpytywany jest adres googla (można by i router ale nie radzę). Co się stanie jak komp wyjdzie z zasięgu sieci albo odłącza kabel (do wyboru)? Zobaczmy na logi:
Jan 30 13:01:40 morfikownia systemd[1]: Started NSA blocker. Jan 30 13:01:40 morfikownia ping[3571]: PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. Jan 30 13:01:40 morfikownia ping[3571]: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=35.8 ms Jan 30 13:01:50 morfikownia ping[3571]: 64 bytes from 8.8.8.8: icmp_seq=2 ttl=53 time=33.1 ms Jan 30 13:02:00 morfikownia ping[3571]: 64 bytes from 8.8.8.8: icmp_seq=3 ttl=53 time=34.2 ms Jan 30 13:02:04 morfikownia kernel: wlan0: deauthenticating from c4:6e:1f:95:ef:fd by local choice (Reason: 3=DEAUTH_LEAVING) Jan 30 13:02:04 morfikownia kernel: brcmsmac bcma0:0: brcmsmac: brcms_ops_bss_info_changed: disassociated ... Jan 30 13:02:10 morfikownia systemd[1]: ping.service watchdog timeout (limit 30s)! Jan 30 13:02:10 morfikownia systemd[1]: ping.service: main process exited, code=killed, status=6/ABRT Jan 30 13:02:10 morfikownia systemd[1]: Unit ping.service entered failed state. Jan 30 13:02:10 morfikownia systemd[1]: ping.service failed. Jan 30 13:02:10 morfikownia systemd[1]: ping.service holdoff time over, scheduling restart. Jan 30 13:02:10 morfikownia systemd[1]: Stopping NSA blocker... Jan 30 13:02:10 morfikownia systemd[1]: Starting NSA blocker... Jan 30 13:02:10 morfikownia systemd[1]: Started NSA blocker. Jan 30 13:02:41 morfikownia systemd[1]: ping.service watchdog timeout (limit 30s)! Jan 30 13:02:41 morfikownia systemd[1]: ping.service: main process exited, code=killed, status=6/ABRT Jan 30 13:02:41 morfikownia systemd[1]: Unit ping.service entered failed state. Jan 30 13:02:41 morfikownia systemd[1]: ping.service failed. Jan 30 13:02:41 morfikownia systemd[1]: ping.service holdoff time over, scheduling restart. Jan 30 13:02:41 morfikownia systemd[1]: Stopping NSA blocker... Jan 30 13:02:41 morfikownia systemd[1]: Starting NSA blocker... Jan 30 13:02:41 morfikownia systemd[1]: Started NSA blocker. Jan 30 13:03:11 morfikownia systemd[1]: ping.service watchdog timeout (limit 30s)! Jan 30 13:03:11 morfikownia systemd[1]: ping.service: main process exited, code=killed, status=6/ABRT Jan 30 13:03:11 morfikownia systemd[1]: Unit ping.service entered failed state. Jan 30 13:03:11 morfikownia systemd[1]: ping.service failed. Jan 30 13:03:11 morfikownia systemd[1]: ping.service holdoff time over, scheduling restart. Jan 30 13:03:11 morfikownia systemd[1]: Stopping NSA blocker... Jan 30 13:03:11 morfikownia systemd[1]: Starting NSA blocker... Jan 30 13:03:11 morfikownia systemd[1]: start request repeated too quickly for ping.service Jan 30 13:03:11 morfikownia systemd[1]: Forcibly rebooting as result of failure. Jan 30 13:03:11 morfikownia systemd[1]: Failed to start NSA blocker. Jan 30 13:03:11 morfikownia systemd[1]: Unit ping.service entered failed state. Jan 30 13:03:11 morfikownia systemd[1]: ping.service failed. Jan 30 13:03:11 morfikownia systemd[1]: Shutting down. Jan 30 13:03:11 morfikownia systemd[1]: Set hardware watchdog to 10min. Jan 30 13:03:11 morfikownia kernel: watchdog watchdog0: watchdog did not stop! Jan 30 13:03:12 morfikownia systemd-shutdown[1]: Sending SIGTERM to remaining processes...
xD
Offline
W końcu udało mi się odtworzyć konsolę, którą miałem na pulpicie, wykorzystując do tego celu journalctl . Wcześniej wykorzystywałem do tego urządzenie FIFO + rsyslog . W tej chwili już nie potrzebuje ani jednego ani drugiego. xD Całość sprowadza się do wpisania w config tmuxa poniżej linijki:
new -d -s logi -n logi "journalctl -b --no-pager | ccze -m ansi && journalctl -n 0 -f | ccze -m ansi"
Są tam dwa wywołania journalctl, z których jeden czyta logi od startu maszyny, drugi zaś nasłuchuje kolejnych. Oba logi są pokolorowane. Na dobrą sprawę z wierzchu, to niczym się ta konsola nie różni. Jest tylko trochę więcej komunikatów + dodatkowo będą wyświetlane logi z wczesnego startu systemu, bo tego rsyslog nie potrafił. Dodatkowa zaleta tego rozwiązania jest taka, że jeśli mi tmux zdechnie, to po tym jak się odpali, dostaję kompletny log, a nie tak jak w przypadku tego urządzenia FIFO, tracone było wszystko i log zaczynał się w miejscu urwania.
I taka sprawa jeszcze:
Jan 31 22:17:12 morfikownia su[46070]: + /dev/pts/2 morfik:root Jan 31 22:17:12 morfikownia su[46070]: pam_unix(su:session): session opened for user root by (uid=1000) Jan 31 22:30:37 morfikownia systemd[1]: Stopping Flush Journal to Persistent Storage... Jan 31 22:30:37 morfikownia systemd[1]: Stopping Journal Service... Jan 31 22:30:37 morfikownia systemd-journal[257]: Journal stopped Jan 31 22:30:37 morfikownia systemd-journal[50572]: Permanent journal is using 116.7M (max allowed 300.0M, trying to leave 1.7G free of 4.6G available → current limit 300.0M). Jan 31 22:30:37 morfikownia systemd-journald[257]: Received SIGTERM from PID 1 (systemd). Jan 31 22:30:37 morfikownia systemd[1]: Starting Journal Service... Jan 31 22:30:37 morfikownia systemd-journal[50572]: Journal started Jan 31 22:30:37 morfikownia systemd[1]: Started Journal Service. Jan 31 22:30:37 morfikownia systemd[1]: Starting Flush Journal to Persistent Storage... Jan 31 22:30:37 morfikownia systemd[1]: Started Flush Journal to Persistent Storage.
Jak widać wyżej, log jest ciągły, nawet pomimo zresetowania journala -- gdybym zresetował rsysloga, konsolę by mi szlag trafił i trzeba by ją odpalać jeszcze raz.
No to już jedną nogą jestem przy pozbyciu się rsysloga. Jeszcze muszę nauczyć ten journalctl łapać logi z sieci oraz filtrować logi usług, bo sporo komunikatów jest zbędnych -- jeśli te dwie rzeczy uda mi się zaimplementować, to wywalam rsysloga razem z logrotate i uprzątnę ten burdel co mi się zrobił przez ostatnie miesiące w /var/log/ . xD
Offline
Chyba odkryłem ciekawy sposób na analizę logów journala. Wszyscy tak przepadają za tymi setkami plików w /var/log/ , że ludzie doznają szoku gdy zamiast tej całej masy plików jest tylko jeden albo dwa. xD Jeśli ktoś potrzebuje takich plików w dalszym ciągu, to może dodać sobie do crona poniższą linijkę:
journalctl --since -10m --no-pager -l -u apache2 >> /var/log/apache2.log
albo taką:
journalctl --since -10m --no-pager -l -u apache2 -p err >> /var/log/apache2-err.log
albo może i taką:
journalctl --since -10m --no-pager -l -u apache2 | grep xaxaaxax >> /var/log/apache2.log
I pozmieniać przy tym parametr -u, który odpowiada za usługę wywoływaną via systemctl start *.service .
Oczywiście czas i rodzaj logów można sobie dowolnie dostosować -- można też z nich zwyczajnie zrezygnować, choć dobrze jest zostawić chociaż czas, by nie przetwarzać całego dziennika w kółko, co przyśpieszy cały proces. Powyższe linijki przetwarzają logi dziennika od chwili wywołania do 10min wstecz. Jeśli się to wywoła w cronie w odstępach 10min to logi powędrują do plików w formie ciągłej i można z tymi plikami robić co się chce.
Najlepsze jest to, że jeśli się włączy hybrydę, czyli logi w RAM + na dysku (odpowiedni interwał flushowania), to operacje analizy logów będą się dokonywać błyskawicznie, przynajmniej do chwili zapisu ich na dysk. xD
A jeśli ktoś chciałby przesyłać logi w czasie rzeczywistym, to można dorobić usługę dla systemd i powrzucać do niej np. takie linijki:
ExecStart=/bin/sh -c "/bin/journalctl --no-pager -l -f -n 0 -u apache2 >> /var/log/apache2.log &"
Choć taki podsłuch kosztuje 0,5M RAMu.
A jak komuś brakuje czegoś z filtru rsysloga, to niech filtruje po SYSLOG_FACILITY= , tutaj dokładna rozpiska http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html .
Komuś jeszcze brakuje jakichś rozdzielnych plików z logami? xD
Ostatnio edytowany przez morfik (2015-02-02 05:00:59)
Offline
Doszukałem się trochę info na temat tego ficzera z szyfrowaniem dziennika:
One key is the "sealing key" which is kept on the system, and the other is the "verification key" which should be securely stored elsewhere. Using the FSPRG mechanism, a new sealing key is generated periodically using a non-reversible process. The old key is then securely deleted from the system after the change.
The verification key can be used to calculate the sealing key for any given time range. That means that the attacker can only access the current sealing key (which will presumably be used for the next sealing operation), while the administrator can reliably generate any sealing key to verify previous log file seals. Changing log file entries prior to the last seal will result in a verification failure.
http://lwn.net/Articles/512895/[/quote]
By z skorzystać z tej opcji, trzeba w /etc/systemd/journald.conf mieć ustawione:Kod:
... Storage=persistent Seal=yes ...Trzeba także wygenerować sobie dwa klucze, a te z kolei zaś najlepiej tworzyć z mniejszym interwałem niż jest domyślnie czyli 15min:
Kod:
# journalctl --setup-keys --interval=60sPo stworzeniu kluczy trzeba zatrzymać dziennik, usunąć wszystkie pliki dziennika i wystartować go jeszcze raz.
I tu jest mały problem, z tym, że nie wiem czy to tylko u mnie, czy to jakiś bug/ficzer, że ten mechanizm nie działa. xD Jeśli popatrzeć na sam klucz:Kod:
root:/var/log/journal/159815709bbc46c29ef786cfc497afd4# ls -al total 8.1M drwxr-sr-x+ 2 root systemd-journal 4.0K 2015-02-01 07:16:13 ./ drwxr-sr-x+ 3 root systemd-journal 4.0K 2015-01-22 19:22:30 ../ -rw-------+ 1 root systemd-journal 482 2015-02-01 07:18:00 fss -rw-r-----+ 1 root systemd-journal 8.0M 2015-02-01 07:18:00 system.journa l root:/var/log/journal/159815709bbc46c29ef786cfc497afd4# ls -al total 8.1M drwxr-sr-x+ 2 root systemd-journal 4.0K 2015-02-01 07:16:13 ./ drwxr-sr-x+ 3 root systemd-journal 4.0K 2015-01-22 19:22:30 ../ -rw-------+ 1 root systemd-journal 482 2015-02-01 07:19:00 fss -rw-r-----+ 1 root systemd-journal 8.0M 2015-02-01 07:18:00 system.journalto widać wyraźnie, że się generuje co 1min ale jeśli chodzi o sprawdzanie dziennika, to przed pieczętowaniem jest ok:
Kod:
# journalctl --verify --verify-key 48738d-de9093-2f6b15-9416f8/181f35-35a4e900 PASS: /var/log/journal/159815709bbc46c29ef786cfc497afd4/system.journal => No sealing yet, 14.775ms of entries not sealed.ale po zapieczętowaniu, już nie jest ok i wyrzuca błędy o nieprawidłowych wiadomościach.
Nie mam pojęcia co z tym zrobić — jest dokładnie to samo na wersji eksperymentalnej i sidowej. Próbowałem na standardowych ustawieniach, jak i na swoich własnych i ciągle to samo. Znalazłby się ktoś, kto by przetestował czy ten mechanizm u niego działa normalnie? xD
Offline
@morfik
Witam
moze to Ciebie, czy w ogole kogokolwiek zainteresuje - niestety po angielsku
[url]http://strims.pl/s/Linux/tb/rx3phq/co-nowego-zobaczymy-w-systemd-w-2015-roku[/url]
pozdrawiam
Offline
Ja po angielsku czytam lepiej niż po polsku, zwłaszcza jeśli chodzi o linuxy, xD
systemctl-cat, systemctl-edit: cat the config file of the unit you specify, so you don't need to know the path on the system (ie: systemctl-cat apache2.service). The systemctl-edit apache2.service immediately opens the unit file to edit. After a save, the service can get reloaded automatically.[/quote]
A tego nie wiedziałem — ułatwi mi to życie, bo wpisywanie ciągle ścieżek /lib/systemd/system/systemd-... wnerwia człowieka. xDjournald-remoting: the binary logger now has remote support (aka: remoting) via HTTP (instead of the syslog protocol, which isn't standardized (ie: no timezones, single-line logs only, ...)). Journald has a pull and push model. Pull = HTTP GET request for a JSON stream. Push model pushes via the HTTP POST request to a remote journald instance. Allows for "simple" implementations of programs (PHP, Ruby, ...) to send data to a remote journald endpoint, since it's just HTTP POST. Could replace syslogging.[/quote]
Obadam, może uda się zastąpić rsysloga całkowicie. xDCan also hide partitions instead of making them just read only. For instance, if /home is "hidden" it will appear as an empty directory.
...
Can also hide /dev/* devices and hide all the physical devices (like /dev/sda, ...) and only keep /dev/zero, /dev/null, ... for particular services.[/quote]
Podoba mi się to. xDOstatnio edytowany przez morfik (2015-02-03 19:39:13)
Offline
Właśnie doinstalowałem sobie plymouth -- i tak nie idzie przeczytać tych komunikatów na starcie systemu, to chociaż ładny obrazek teraz jest. xD Nawet system ździebko szybciej się uruchamia:
$ systemd-analyze Startup finished in 18.127s (kernel) + 22.224s (userspace) = 40.352s
Jakieś 8 sekund, no i 2:20 to też już to nie jest, ale żeby połowę czasu zajmowało wpisywanie hasła? xD
Tylko teraz jest taki problem, bo nie widać czy jakieś usługi się wywaliły -- jakby nie patrzeć, zawsze coś czerwonego szło wyłapać i było wiadomo, że coś jest nie tak, a teraz?
$ systemctl --failed --no-pager 0 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
Wrzuciłem sobie to na tmuxową konsolę:
new -d -s system-logs -n system "journalctl -b --no-pager | ccze -m ansi && systemctl --failed --no-pager | ccze -m ansi && journalctl -n 0 -f | ccze -m ansi"
I ładnie wyświetla po załadowaniu się konsoli. xD
Offline
Właśnie się doszukałem ciekawej opcji dla kernela:
systemd.confirm_spawn=1
Po jej dopisaniu, powinien się odpalić tryb interaktywny systemd, coś jak w openrc -- pyta przed wystartowaniem usługi. No tylko jest jeden problem: https://bugzilla.redhat.com/show_bug.cgi?id=1084401
Jak oni myśleli przy robieniu tego trybu interaktywnego, to ja nie mam zielonego pojęcia. To wygląda mniej więcej tak: odpala się system, wyrzuca pierwszą usługę, wpisuje się "y", po czym czyta komunikat, potem następna usługa i znów komunikat. Ale tu niema tak łatwo -- za wolno ci idzie czytanie i odpowiadanie, to usługa zostanie wystartowana bez potrzeby odpowiadania na pytania (domyślne "y"). Czyli czytasz sobie błęda czy coś próbujesz zrozumieć, a tu usługi ci się w tle odpalają i generują komunikaty i ekran się przewija. Szkoda, że nie wiem, kto jest odpowiedzialny osobiście za ten mechanizm, to bym mu pogratulował. xD
Mam nadzieję, że to poprawią, bo szlag człowieka może trafić przez brak tego trybu interaktywnego.
Offline
1580
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:10:01)
Offline
W OpenRC trym interaktywny się włącza jednym przyciskiem, domyślnie [b]i[/b] w czasie uruchamiania runlevelu sysinit.
Opcja w konfigu:
# Set rc_interactive to "YES" and you'll be able to press the I key during
# boot so you can choose to start specific services. Set to "NO" to disable
# this feature. This feature is automatically disabled if rc_parallel is
# set to YES.
rc_interactive="YES"[/quote]
W SystemD nigdy nic podobnego nie widziałem.Ostatnio edytowany przez Jacekalex (2015-02-07 14:32:27)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
[quote=ethanak]fajny wynalazek! ktoś to już opatentował?[/quote]
Licencja BSD, możesz to przepisać jako łatki i do SystemD i do M$ Windows,
nie ma problemu. xD
Offline
[quote=Jacekalex]W OpenRC trym interaktywny się włącza jednym przyciskiem, domyślnie [b]i[/b] w czasie uruchamiania runlevelu sysinit.
Opcja w konfigu:
# Set rc_interactive to "YES" and you'll be able to press the I key during
# boot so you can choose to start specific services. Set to "NO" to disable
# this feature. This feature is automatically disabled if rc_parallel is
# set to YES.
rc_interactive="YES"[/quote]
W SystemD nigdy nic podobnego nie widziałem.[/quote]
Pewnie dlatego, że mamy 21. wiek i usługi startują równocześnie.
Offline
i dlatego w durnym netbooku nie mogę wyczaić gdzie mi się system kaszani? może to równoległe uruchamianie jest zahebiste dopóki coś się nie spartoli.
btw. nie wiem jak wy - ja serwery zwykłem uruchamiać, mają działać, i jeśli muszę zrobić reboot wcześniej niż rok po odpaleniu to znaczy że albo mam problemy sprzętowe, albo coś spieprzyłem.
Offline
[quote=ethanak]i dlatego w durnym netbooku nie mogę wyczaić gdzie mi się system kaszani? może to równoległe uruchamianie jest zahebiste dopóki coś się nie spartoli.[/quote]
W logi możesz zajrzeć.
Poza tym:
http://freedesktop.org/wiki/Software/systemd/Debugging/
Offline
[quote=yossarian][quote=Jacekalex]W OpenRC trym interaktywny się włącza jednym przyciskiem, domyślnie [b]i[/b] w czasie uruchamiania runlevelu sysinit.
Opcja w konfigu:
# Set rc_interactive to "YES" and you'll be able to press the I key during
# boot so you can choose to start specific services. Set to "NO" to disable
# this feature. This feature is automatically disabled if rc_parallel is
# set to YES.
rc_interactive="YES"[/quote]
W SystemD nigdy nic podobnego nie widziałem.[/quote]
Pewnie dlatego, że mamy 21. wiek i usługi startują równocześnie.[/quote]
Jak ostatnio wrzuciłem SystemD na Gentusia, to faktycznie, usługa, 5 minut postoju, usługa, 5 minut, usługa, 5 minut - w skali tygodnia można to uznać za jednocześnie.:D
W Debku Jessie zainstalowałem SystemD, i uruchamianie Debiana zakończyło się na starcie Udeva.
Może kiedyś będę musiał pogodzić się z Systemd, ale póki taka konieczność nie występuje, to wolę spróbować przeczekać to cudo.
Są duże szanse, że uda mi się z OpenRC doczekać końca SystemD, sporo obiektywnych informacji na to wskazuje. :D
Pozdro
;)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
A mi tam działa od zainstalowania siduction.
Offline
Czy tylko mi ten systemd działa jak trza? xD
Na początku przy przejściu, to faktycznie wlekł się ten start — miałem ponad 2:20. Teraz?
morfik:~$ systemd-analyze Startup finished in 15.536s (kernel) + 25.735s (userspace) = 41.272s morfik:~$ systemd-analyze blame | head 8.930s morfinetwork.service 6.664s networking.service 4.559s systemd-cryptsetup@kabi.service 3.568s monitorix.service 3.363s accounts-daemon.service 3.158s keyboard-setup.service 2.829s exim4.service 2.283s upower.service 2.098s zram_tmp.service 2.088s systemd-logind.service
Czyli realnie to jest 26s, bo te15s to czas na otworzenie zaszyfrowanego LVM. Z czego połowa tych usług, to są moje niestandardowe rzeczy. xD Jest też jakiś problem z siecią jeszcze, może to po części wina wifi, dhcp albo tych skryptów init, bo jeszcze nie patrzyłem na sieć w wykonaniu systemd, a oni tam też mają jakąś natywną usługę do tego — za jakiś czas też rzucę na to okiem
Tu jeszcze taka ciekawostka — znalazłem na necie linijkę, która pokazuje całkowity czas potrzebny na wystartowanie wszystkich usług, tyle, że w schemacie sysvinit, czyli jedna po drugiej. Tylko trochę lipa, bo jednostki nie są takie same i musiałem to zrobić na dwa razy:
morfik:~/Desktop$ cat 1|awk '{print $0;sum=sum+$1} END {print NR,"services: Total =",sum/1000,"seconds"}' 675ms dev-hugepages.mount 554ms kbd.service 544ms systemd-tmpfiles-setup-dev.service 521ms cpufrequtils.service 431ms systemd-fsck@dev-disk-by\x2duuid-27632431\x2dfa15\x2d49ba\x2d8354\x2d9c193e321aa6.service 427ms systemd-journald.service 425ms kmod-static-nodes.service 397ms nfs-common.service 355ms systemd-rfkill@rfkill0.service 333ms systemd-fsck@dev-mapper-kabi.service 318ms home.mount 276ms systemd-tmpfiles-setup.service 272ms lvm2-activation.service 228ms sudo.service 222ms plymouth-read-write.service 216ms systemd-udev-trigger.service 210ms console-setup.service 209ms systemd-backlight@backlight:acpi_video0.service 207ms systemd-fsck@dev-disk-by\x2duuid-4c67dff5\x2d3d8e\x2d4b3f\x2d9cf1\x2d49b88d5f67a9.service 204ms rpcbind.service 200ms systemd-tmpfiles-clean.service 186ms systemd-remount-fs.service 173ms boot.mount 137ms sysfsutils.service 135ms systemd-backlight@backlight:intel_backlight.service 128ms systemd-udevd.service 113ms media-Kabi.mount 110ms systemd-timesyncd.service 101ms plymouth-start.service 98ms user@108.service 90ms systemd-sysctl.service 88ms systemd-random-seed.service 86ms udev-finish.service 65ms systemd-update-utmp.service 63ms plymouth-quit.service 62ms lvm2-monitor.service 59ms plymouth-quit-wait.service 58ms systemd-cryptsetup@debian_laptop.service 53ms dev-disk-by\x2duuid-c4f58930\x2dbfda\x2d4f4e\x2dbad0\x2d2be8d1b5bc9e.swap 40ms user@1000.service 31ms systemd-rfkill@rfkill1.service 28ms dnscrypt-proxy.service 17ms cloud_storage-mega.encrypted.service 8ms lvm2-pvscan@254:0.service 4ms systemd-update-utmp-runlevel.service 2ms sys-fs-fuse-connections.mount 46 services: Total = 9.159 seconds morfik:~/Desktop$ cat 2|awk '{print $0;sum=sum+$1} END {print NR,"services: Total =",sum,"seconds"}' 8.930s morfinetwork.service 6.664s networking.service 4.559s systemd-cryptsetup@kabi.service 3.568s monitorix.service 3.363s accounts-daemon.service 3.158s keyboard-setup.service 2.829s exim4.service 2.283s upower.service 2.098s zram_tmp.service 2.088s systemd-logind.service 2.083s rsyslog.service 2.016s systemd-fsck-root.service 1.994s alsa-restore.service 1.965s lm-sensors.service 1.964s cryptmount.service 1.962s ifplugd.service 1.960s loadcpufreq.service 1.959s virtualbox.service 1.958s hddtemp.service 1.958s nfs-kernel-server.service 1.958s systemd-user-sessions.service 1.922s systemd-udev-settle.service 1.788s zram_swap.service 1.753s hdparm.service 1.701s rtkit-daemon.service 1.701s systemd-modules-load.service 1.519s rc-local.service 1.474s systemd-journal-flush.service 1.454s lightdm.service 1.452s resolvconf.service 1.443s lvm2-activation-early.service 1.122s polkitd.service 1.099s dev-mqueue.mount 1.098s sys-kernel-debug.mount 34 services: Total = 80.843 seconds
Łącznie zatem na same usługi to by było:
46 services: Total = 9.159 seconds 34 services: Total = 80.843 seconds
Czyli około 90s, do tego trzeba by doliczyć jeszcze czas na wpisanie hasła: 15.536s i start systemu zajmuje.... 105s — to ja już wolę te moje 41s. xD
A tak wygląda start: http://i.imgur.com/frvfK1K.png
Jeśli ktoś, patrząc na ten wykresik, nie rozumie co tam się dzieje, to powinien poczytać i jestem zdania, że w chwili gdy zrozumie co tam się odbywa, większość (albo i wszystkie) problemy znikną raz dwa. xD
i dlatego w durnym netbooku nie mogę wyczaić gdzie mi się system kaszani? może to równoległe uruchamianie jest zahebiste dopóki coś się nie spartoli.[/quote]
To może napisz co ci się tam dzieje. Rzuć okiem na wcześniejsze posty w tym temacie, tam masz ciekawą rozpiskę jak przeanalizować start systemu — w skrajnych wypadkach to ci wypluje 10k linijek i nie ma bata byś nie doszedł wtf — ja póki co szereg rzeczy sobie wyjaśniłem i po mimo faktu, że jadę na wersji z experimentala, sam system działa mi bez zarzutu — może najwyższy czas wyzbyć się uprzedzeń, bo póki co, to tylko słyszę, że "omfg nie działa, to wina systemd", a o analizie wtf, to już w przypadku sytemd nikt nie słyszał, a ten init jest o wiele bardziej rozmowny niż wszystko inne. xD
Jeśli cierpicie na brak informacji, tu macie zajebistą dokumentację: http://www.freedesktop.org/software/systemd/man/systemd.index.html — jest tego naprawdę sporo, i póki co wszystko czego potrzebowałem do zrozumienia tematu znalazłem tam w tej dokumentacji. Choć i tak jeszcze w 70% linków nie było dane mi zajrzeć. xD
Zatem do dzieła, wiem, że ciężko jest zmienić swoje przyzwyczajenia (patrzcie np. ipv6|ipv4 albo ip|ifconfig) ale po tygodniu operowania na systemd, będziecie go sobie chwalić. xDOstatnio edytowany przez morfik (2015-02-08 02:14:12)
Offline
Time (s) | Query |
---|---|
0.00017 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00130 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.47.193' WHERE u.id=1 |
0.00075 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.47.193', 1732776979) |
0.00029 | SELECT * FROM punbb_online WHERE logged<1732776679 |
0.00093 | SELECT topic_id FROM punbb_posts WHERE id=282076 |
0.01287 | SELECT id FROM punbb_posts WHERE topic_id=29025 ORDER BY posted |
0.00085 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=29025 AND t.moved_to IS NULL |
0.00009 | SELECT search_for, replace_with FROM punbb_censoring |
0.00309 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=29025 ORDER BY p.id LIMIT 25,25 |
0.00082 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=29025 |
Total query time: 0.02121 s |