09. Services, part 2.
Viewing system journal
Events in reverse order related to a particular unit:
andrewt@comp-core-i7-3615qm-0dbf32 ~ $ journalctl -r -u echosrv.service
Events in reverse order filtered with grep:
andrewt@comp-core-i7-3615qm-0dbf32 ~ $ journalctl -r | grep echosrv
Creating a service for hexdump
Create a service unit for hexdump:
andrewt@comp-core-i7-3615qm-0dbf32 ~ $ su - Password: comp-core-i7-3615qm-0dbf32 ~ # mcedit /etc/systemd/system/hexdump@.service
With the following content:
[Unit] Description=Hexdump service After=network.target [Service] Type=simple ExecStart=/usr/bin/hexdump -C StandardInput=socket [Install] WantedBy=default.target
Create a socket unit for hexdump:
comp-core-i7-3615qm-0dbf32 ~ # mcedit /etc/systemd/system/hexdump.socket
With the following content:
[Unit] Description=Soketizing Hexdump [Socket] ListenStream=1616 Accept=yes [Install] WantedBy=sockets.target
Verify the created service units:
comp-core-i7-3615qm-0dbf32 ~ # systemd-analyze verify hexdump@.service /lib/systemd/system/alteratord.socket:6: ListenStream= references a path below legacy directory /var/run/, updating /var/run/alteratord/.socket → /run/alteratord/.socket; please update the unit file accordingly. /lib/systemd/system/smb.service:10: PIDFile= references a path below legacy directory /var/run/, updating /var/run/smbd.pid → /run/smbd.pid; please update the unit file accordingly. /lib/systemd/system/winbind.service:9: PIDFile= references a path below legacy directory /var/run/, updating /var/run/winbindd.pid → /run/winbindd.pid; please update the unit file accordingly. /lib/systemd/system/nmb.service:10: PIDFile= references a path below legacy directory /var/run/, updating /var/run/nmbd.pid → /run/nmbd.pid; please update the unit file accordingly. /lib/systemd/system/chronyd.service:10: PIDFile= references a path below legacy directory /var/run/, updating /var/run/chrony/chronyd.pid → /run/chrony/chronyd.pid; please update the unit file accordingly.
Start the serice and check its status:
comp-core-i7-3615qm-0dbf32 ~ # systemctl start hexdump.socket comp-core-i7-3615qm-0dbf32 ~ # systemctl status hexdump.socket ● hexdump.socket - Soketizing Hexdump Loaded: loaded (/etc/systemd/system/hexdump.socket; disabled; vendor preset: disabled) Active: active (listening) since Mon 2020-05-18 01:02:11 MSK; 1min 12s ago Listen: [::]:1616 (Stream) Accepted: 0; Connected: 0; Tasks: 0 (limit: 2361) Memory: 12.0K CGroup: /system.slice/hexdump.socket May 18 01:02:11 comp-core-i7-3615qm-0dbf32 systemd[1]: Listening on Soketizing Hexdump.
See who is listening to sockets:
comp-core-i7-3615qm-0dbf32 ~ # netstat -ltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:netbios-ssn *:* LISTEN 2346/smbd tcp 0 0 localhost.localdomai:domain *:* LISTEN 2915/dnsmasq tcp 0 0 *:ssh *:* LISTEN 2075/sshd tcp 0 0 localhost.localdomain:ipp *:* LISTEN 2047/cupsd tcp 0 0 *:microsoft-ds *:* LISTEN 2346/smbd tcp 0 0 *:netbios-ssn *:* LISTEN 2346/smbd tcp 0 0 *:1616 *:* LISTEN 1/init tcp 0 0 localhost:domain *:* LISTEN 2915/dnsmasq tcp 0 0 *:ssh *:* LISTEN 2075/sshd tcp 0 0 localhost:ipp *:* LISTEN 2047/cupsd tcp 0 0 *:microsoft-ds *:* LISTEN 2346/smbd
Test the service:
comp-core-i7-3615qm-0dbf32 ~ # netcat localhost 1616 Hello World! 00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 0a |Hello World!.| 0000000d
While a connection is active, check service status:
comp-core-i7-3615qm-0dbf32 ~ # systemctl | grep hex hexdump@6-127.0.0.1:1616-127.0.0.1:53340.service loaded active running Hexdump service (127.0.0.1:53340) system-hexdump.slice loaded active active system-hexdump.slice hexdump.socket loaded active listening Soketizing Hexdump
Close the connection and check the status again:
comp-core-i7-3615qm-0dbf32 ~ # systemctl | grep hex system-hexdump.slice loaded active active system-hexdump.slice hexdump.socket loaded active listening Soketizing Hexdump
See systemd journal:
comp-core-i7-3615qm-0dbf32 ~ # journalctl -r -n 4 -- Logs begin at Sun 2020-04-19 06:24:19 MSK, end at Mon 2020-05-18 01:29:05 MSK. -- May 18 01:29:05 comp-core-i7-3615qm-0dbf32 systemd[1]: hexdump@8-127.0.0.1:1616-127.0.0.1:53344.service: Succeeded. May 18 01:29:02 comp-core-i7-3615qm-0dbf32 systemd[1]: Started Hexdump service (127.0.0.1:53344). May 18 01:28:42 comp-core-i7-3615qm-0dbf32 systemd[1]: hexdump@7-127.0.0.1:1616-127.0.0.1:53342.service: Succeeded. May 18 01:28:36 comp-core-i7-3615qm-0dbf32 systemd[1]: Started Hexdump service (127.0.0.1:53342).
Tasks: Modifying the TCP echo service
- Print diagnostics messages to stderr and see systemd journal.
- Read entire message instead of 32 bytes (by read() or receive() in cycle)
Implement forking in the service so that it could handle multiple connections at the same time.
- Just leave the part of the program that reads from data socket to child process
and continue to accept connections in father process (with no wait() for the child).
Homework
Finish all the tasks:
Look at the last task: there's system programming here
- Create folder '09_Services2' at sugon.
- Put there the updated 'tcp_echo_serverSR.c' file.
- Save systemd journal with events related to the services into text files and upload them to sugon. Hexdump service:
andrewt@comp-core-i7-3615qm-0dbf32 ~ $ journalctl -u hexdump*service > hexdump.journal
TCP echo service:andrewt@comp-core-i7-3615qm-0dbf32 ~ $ journalctl -u echosrv.service > echosrv.journal