0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

systemd Tips

Last updated at Posted at 2024-08-18

各cgroupsで使われてるリソースを知りたい

以下を使う

$ systemd-cgtop

serviceのログ出力先を制御

「StandardOutput」、「StandardError」ディレクティブで指定

emergency.service
...

[Service]
...
StandardOutput=inherit
StandardError=inherit
...

consoleとは

「StandardOutput=journal+console」としたときのconsoleとはなんぞや?

各端末には端末デバイスファイルが割り当てられる

$ tty
/dev/ttymxc1

consoleとはシステムコンソール(/dev/console)のことでカーネルメッセージはここに送られる。

$ ls -al /dev
...
crw-------    1 root     root        5,   1 Sep 20 18:55 console
...

で、これはブートで設定される。consoleにはnullを指定できるが、基本はttyを指定する。

u-boot=> printenv
...
console=ttymxc1,115200
...

TTYPathの設定(自分への戒め)

ユニットファイルで、以下のように書く時、TTYPathにはttyを書くこと。
/dev/nullや/dev/zeroはttyではないよ!

StandardError=tty
TTYPath=/dev/ttymxc1

パス監視

以下の時アクティブにする

  • /root/machine-idが存在すれば、サービスユニットをアクティブにする
  • 「存在しない⇒存在する」に変化すれば、サービスユニットをアクティブにする

事前状態

root@ubuntu:/lib/systemd/system# systemctl cat systemd-journald --no-pager
# /lib/systemd/system/systemd-journald.service
#  SPDX-License-Identifier: LGPL-2.1-or-later
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Journal Service
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Requires=systemd-journald.socket
After=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket syslog.socket
Before=sysinit.target

[Service]
DeviceAllow=char-* rw
ExecStart=/lib/systemd/systemd-journald
FileDescriptorStoreMax=4224
IPAddressDeny=any
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
OOMScoreAdjust=-250
ProtectClock=yes
Restart=always
RestartSec=0
Nice=-1
RestrictAddressFamilies=AF_UNIX AF_NETLINK
RestrictNamespaces=yes
RestrictRealtime=yes
RestrictSUIDSGID=yes
RuntimeDirectory=systemd/journal
RuntimeDirectoryPreserve=yes
Sockets=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket
StandardOutput=null
SystemCallArchitectures=native
SystemCallErrorNumber=EPERM
SystemCallFilter=@system-service
Type=notify
WatchdogSec=3min

# In case you're wondering why CAP_SYS_PTRACE is needed, access to
# /proc/<pid>/exe requires this capability. Thus if this capability is missing
# the _EXE=/OBJECT_EXE= fields will be missing from the journal entries.
CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE CAP_SYSLOG CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_CHOWN CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_MAC_OVERRIDE

# If there are many split up journal files we need a lot of fds to access them
# all in parallel.
LimitNOFILE=524288
root@ubuntu:/lib/systemd/system# systemctl cat systemd-journald.path
# /lib/systemd/system/systemd-journald.path
[Unit]
Description=watch machine-id

[Path]
PathExists=/root/machine-id
root@ubuntu:/lib/systemd/system# ls /root
snap  vboxpostinstall.sh
root@ubuntu:/lib/systemd/system# systemctl status systemd-journald --no-pager
○ systemd-journald.service - Journal Service
     Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
     Active: inactive (dead) since Mon 2024-08-19 02:34:31 JST; 4min 36s ago
TriggeredBy: ● systemd-journald-audit.socket
             ● systemd-journald.socket
             ● systemd-journald-dev-log.socket
       Docs: man:systemd-journald.service(8)
             man:journald.conf(5)
    Process: 23465 ExecStart=/lib/systemd/systemd-journald (code=exited, status=0/SUCCESS)
   Main PID: 23465 (code=exited, status=0/SUCCESS)
     Status: "Processing requests..."
        CPU: 69ms

Aug 19 02:20:06 ubuntu systemd-journald[23465]: Journal started
Aug 19 02:20:06 ubuntu systemd-journald[23465]: System Journal (/var/log/journal/9d985ecbe7d846579fe4025d0221499d) is 64.0M, max 4.0G, 3.9G free.
Aug 19 02:34:31 ubuntu systemd-journald[23465]: Journal stopped
root@ubuntu:/lib/systemd/system# systemctl status systemd-journald.path --no-pager
○ systemd-journald.path - watch machine-id
     Loaded: loaded (/lib/systemd/system/systemd-journald.path; static)
     Active: inactive (dead)
   Triggers: ● systemd-journald.service

Aug 19 01:53:29 ubuntu systemd[1]: Stopped watch machine-id.
Aug 19 01:57:57 ubuntu systemd[1]: Started watch machine-id.
Aug 19 01:58:54 ubuntu systemd[1]: systemd-journald.path: Deactivated successfully.
Aug 19 01:58:54 ubuntu systemd[1]: Stopped watch machine-id.
Aug 19 02:16:11 ubuntu systemd[1]: systemd-journald.path: Deactivated successfully.
Aug 19 02:16:11 ubuntu systemd[1]: Stopped watch machine-id.
Aug 19 02:19:06 ubuntu systemd[1]: systemd-journald.path: Deactivated successfully.
Aug 19 02:19:06 ubuntu systemd[1]: Stopped watch machine-id.
Aug 19 02:34:21 ubuntu systemd[1]: systemd-journald.path: Deactivated successfully.
Aug 19 02:34:21 ubuntu systemd[1]: Stopped watch machine-id.

検証

  1. パスユニットをアクティブにする

    パスユニットはactive(waiting)になるが、サービスユニットはinactiveのまま。
    waitingは/root/machine-idファイルの有無を監視してる状態。

    root@ubuntu:/lib/systemd/system# systemctl start systemd-journald.path           
    root@ubuntu:/lib/systemd/system# systemctl status systemd-journald.path --no-pager
    ● systemd-journald.path - watch machine-id
         Loaded: loaded (/lib/systemd/system/systemd-journald.path; static)
         Active: active (waiting) since Mon 2024-08-19 02:48:04 JST; 5s ago
       Triggers: ● systemd-journald.service
    
    root@ubuntu:/lib/systemd/system# systemctl status systemd-journald --no-pager
    ○ systemd-journald.service - Journal Service
         Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
         Active: inactive (dead) since Mon 2024-08-19 02:46:57 JST; 1min 55s ago
    TriggeredBy: ● systemd-journald-audit.socket
                 ● systemd-journald.path
                 ● systemd-journald.socket
                 ● systemd-journald-dev-log.socket
           Docs: man:systemd-journald.service(8)
                 man:journald.conf(5)
        Process: 23521 ExecStart=/lib/systemd/systemd-journald (code=exited, status=0/SUCCESS)
       Main PID: 23521 (code=exited, status=0/SUCCESS)
         Status: "Processing requests..."
            CPU: 111ms
    
    Aug 19 02:41:27 ubuntu systemd-journald[23521]: Journal started
    Aug 19 02:41:27 ubuntu systemd-journald[23521]: System Journal (/var/log/journal/9d985ecbe7d846579fe4025d0221499d) is 64.0M, max 4.0G, 3.9G free.
    Aug 19 02:46:57 ubuntu systemd-journald[23521]: Journal stopped
    
  2. /root/machine-idを作成する

    パスユニットがactive(running)に変化し、サービスユニットをactiveにする

    root@ubuntu:/lib/systemd/system# touch /root/machine-id
    root@ubuntu:/lib/systemd/system# systemctl status systemd-journald.path --no-pager
    ● systemd-journald.path - watch machine-id
         Loaded: loaded (/lib/systemd/system/systemd-journald.path; static)
         Active: active (running) since Mon 2024-08-19 02:48:04 JST; 3min 49s ago
       Triggers: ● systemd-journald.service
    
    root@ubuntu:/lib/systemd/system# systemctl status systemd-journald --no-pager
    ● systemd-journald.service - Journal Service
         Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
         Active: active (running) since Mon 2024-08-19 02:51:49 JST; 17s ago
    TriggeredBy: ● systemd-journald-audit.socket
                 ● systemd-journald.path
                 ● systemd-journald.socket
                 ● systemd-journald-dev-log.socket
           Docs: man:systemd-journald.service(8)
                 man:journald.conf(5)
       Main PID: 23561 (systemd-journal)
         Status: "Processing requests..."
          Tasks: 1 (limit: 17537)
         Memory: 1.2M
            CPU: 17ms
         CGroup: /system.slice/systemd-journald.service
                 └─23561 /lib/systemd/systemd-journald
    
    Aug 19 02:51:49 ubuntu systemd-journald[23561]: Journal started
    Aug 19 02:51:49 ubuntu systemd-journald[23561]: System Journal (/var/log/journal/9d985ecbe7d846579fe4025d0221499d) is 64.0M, max 4.0G, 3.9G free.
    

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?