在 Ubuntu 18.04 上,如何创建 `/var/log/journal`?

在 Ubuntu 18.04 上,如何创建 `/var/log/journal`?

在我的 Ubuntu 18.04 上,我看到/var/log/journal已经创建,但是我根本不知道它到底是什么造成的。 有人能帮助我吗?我将在下面提供更多详细信息。

这是不是一个XY问题。我问这个问题纯粹是出于好奇,为了systemd更好地了解 Ubuntu。

我学到

通过阅读systemd-journald.service(8)journald.conf(5),我了解到:

  • 如果Storage=persistent/etc/systemd/journald.conf/var/log/journal则会自动创建。
  • 如果Storage=auto在 中/etc/systemd/journald.conf/var/log/journal则不会自动创建(如果不存在)。但如果系统管理员创建/var/log/journalsystemd-journald则会将日志写入其中。否则,它会恢复使用/run/log/journal

在我的 Ubuntu 18.04 上,我/etc/systemd/journald.conf使用所有默认值:

# Entries in this file show the compile time defaults.                                                                  
# You can change settings by editing this file.                                                                         
# Defaults can be restored by simply deleting this file.                                                                
#                                                                                                                       
# See journald.conf(5) for details.                                                                                     
                                                                                                                        
[Journal]                                                                                                               
#Storage=auto                                                                                                           
#Compress=yes                                                                                                           
#Seal=yes                                                                                                               
#SplitMode=uid                                                                                                          
#SyncIntervalSec=5m                                                                                                     
#RateLimitIntervalSec=30s                                                                                               
#RateLimitBurst=1000                                                                                                    
#SystemMaxUse=                                                                                                          
#SystemKeepFree=                                                                                                        
#SystemMaxFileSize=                                                                                                     
#SystemMaxFiles=100                                                                                                     
#RuntimeMaxUse=                                                                                                         
#RuntimeKeepFree=                                                                                                       
#RuntimeMaxFileSize=                                                                                                    
#RuntimeMaxFiles=100                                                                                                    
#MaxRetentionSec=                                                                                                       
#MaxFileSec=1month                                                                                                      
#ForwardToSyslog=yes                                                                                                    
#ForwardToKMsg=no                                                                                                       
#ForwardToConsole=no                                                                                                    
#ForwardToWall=yes                                                                                                      
#TTYPath=/dev/console                                                                                                   
#MaxLevelStore=debug                                                                                                    
#MaxLevelSyslog=debug                                                                                                   
#MaxLevelKMsg=notice                                                                                                    
#MaxLevelConsole=info                                                                                                   
#MaxLevelWall=emerg                                                                                                     
#LineMax=48K

换句话说,我Storage=auto在我的系统上使用。

我也学到了systemd-tmp文件(8)tmp文件.d(5)systemd-tmpfiles根据 tmpfiles.d(5) 中指定的配置文件格式和位置,创建、删除和清理易失性和临时文件和目录。

因此我检查了tmpfiles.d(5)文件夹,只找到了/usr/lib/tmpfiles.d修改属性的配置文件/var/log/journal,如下面的grep输出所示:

/usr/lib/tmpfiles.d$ grep journal *.conf
journal-nocow.conf:# Set the NOCOW attribute for directories of journal files. This flag
journal-nocow.conf:# WARNING: Enabling the NOCOW attribute improves journal performance
journal-nocow.conf:# enabling the NOCOW attribute for journal files is safe, because
journal-nocow.conf:h /var/log/journal - - - - +C
journal-nocow.conf:h /var/log/journal/%m - - - - +C
journal-nocow.conf:h /var/log/journal/remote - - - - +C
systemd.conf:z /run/log/journal 2755 root systemd-journal - -
systemd.conf:Z /run/log/journal/%m ~2750 root systemd-journal - -
systemd.conf:a+ /run/log/journal/%m - - - - d:group:adm:r-x
systemd.conf:a+ /run/log/journal/%m - - - - group:adm:r-x
systemd.conf:a+ /run/log/journal/%m/*.journal* - - - - group:adm:r--
systemd.conf:z /var/log/journal 2755 root systemd-journal - -
systemd.conf:z /var/log/journal/%m 2755 root systemd-journal - -
systemd.conf:z /var/log/journal/%m/system.journal 0640 root systemd-journal - -
systemd.conf:a+ /var/log/journal    - - - - d:group::r-x,d:group:adm:r-x
systemd.conf:a+ /var/log/journal    - - - - group::r-x,group:adm:r-x
systemd.conf:a+ /var/log/journal/%m - - - - d:group:adm:r-x
systemd.conf:a+ /var/log/journal/%m - - - - group:adm:r-x
systemd.conf:a+ /var/log/journal/%m/system.journal - - - - group:adm:r--

h但从、zZ和的含义来看a+,它们似乎都不是创建文件夹的/var/log/journal。它们似乎都只是修改 的属性/var/log/journal

我做了一个测试,删除了文件夹/var/log/journal并重启了电脑。然后我看到文件夹/var/log/journal并没有被重新创建(这是预料Storage=auto之中的,因为我的电脑就是这样的)。相反,文件/run/log/journal夹被创建了(正如预期的那样)。

創造了什麼/var/log/journal

答案1

我的回答将重点介绍为什么全新安装的 Ubuntu Server 22.04 包含一个/var/log/journal目录。其他系统可能会有所不同。

问:为什么全新安装的 Ubuntu Server 22.04 包含/var/log/journal

A。安装程序使用的根文件系统映像包含一个/var/log/journal文件。安装程序本质上是在安装过程中将嵌入的映像复制到目标系统。映像中包含的文件和目录将被复制到目标系统。

安装程序使用的图像与云图像。这些命令显示映像包含/var/log/journal目录。这导致已安装的系统也包含目录。

root@ubuntu-server:~# wget --quiet https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-root.tar.xz
root@ubuntu-server:~# tar tvf jammy-server-cloudimg-amd64-root.tar.xz | grep var/log/journal
drwxr-sr-x root/systemd-timesync    0 2022-10-19 01:04 var/log/journal/

问:为什么图像中包含/var/log/journal

A。该图像包含包。安装包systemdsystemd它将创造/var/log/journal其脚本中的目录postinst

从源头来看

# Enable persistent journal, in auto-mode, by default on new installs installs and upgrades
if dpkg --compare-versions "$2" lt "235-3ubuntu3~"; then
    mkdir -p /var/log/journal
    # create tmpfiles only when running systemd, otherwise %b substitution fails
    if [ -d /run/systemd/system ]; then
        systemd-tmpfiles --create --prefix /var/log/journal
    fi
fi

问:为什么会systemd创建该包/var/log/journal

A有人提出错误报告请求它。

请创建 /var/log/journal,以启用持久日志记录

相关内容