该命令dmesg --level=emerg,alert,crit,err
列出所有高严重程度的错误消息。
出于监控目的,我想知道消息计数是否以某种方式暴露在/proc
文件系统中。如果能指示硬件问题就好了。
该命令dmesg --level=emerg,alert,crit,err
列出所有高严重程度的错误消息。
出于监控目的,我想知道消息计数是否以某种方式暴露在/proc
文件系统中。如果能指示硬件问题就好了。
我在 Debian 上用 C 编写了一个小型服务。
此服务会自动从 Linux 启动,并按预期执行一些文件操作和其他操作。
该服务会将一些信息消息以及错误情况打印到标准输出。当我从控制台(而不是作为服务)运行二进制文件时,这些内容会在控制台窗口中显示出来。
到目前为止我唯一未能完成的事情就是当二进制文件作为服务运行时将其输出写入日志。
我查看了所有找到的搜索结果,以 root 身份查询日志,看到启动/停止服务的系统消息,但服务二进制文件没有打印任何内容。
我只是用printf("hey this should appear in the journal");
- 打印,但日志中什么都看不到。
根据各处的解释,服务的所有输出都应自动定向到日志,对吗?
我可能遗漏了什么,以免发生这种情况?
编辑
我发现了用于日志记录的特殊函数,但实际上我喜欢在控制台或日志中自动获取标准输出的想法,这取决于我如何运行二进制文件。
我尝试了一个 bash 脚本服务,发现它可以echo
按预期将消息写入日志。
我想更好地了解 Linux 服务器上日志管理的工作原理。当我安装 Linux 服务器时,我注意到 /var/log 中有许多日志文件和目录。
我担心这些日志文件可能会无限增长直到服务器空间耗尽。
典型的 Linux 服务器上有哪些默认机制可以防止日志文件无限增长?
我知道 logrotate 通常用于管理日志文件的增长,但是否有在服务器上配置 logrotate 的标准推荐做法?如果没有适当的配置,服务器似乎最终会耗尽空间。
在 Linux 中,如果有必要,RHEL-8.10 或更高版本,我想编写一些 C 代码,这些代码接受各种参数,并在特定条件下发出system("init 0")
关闭系统命令。在发出关闭命令之前,我想在其中放入一行消息,/var/log/messages
说明系统被 ron 的代码关闭,这样我就可以记录关闭的时间。
如何正确写入/var/log/messages
?
显然我可以做一个fopen("/var/log/messages, "a")
和一个简单的fprintf
,但这看起来有点像黑客行为。
当我使用 GParted 进行一些复杂的分区和文件系统操作时,它提供了查看所采取步骤的详细信息的选项。但这并没有提供 GParted 使用的底层命令的所有详细信息。
是否可以从 GParted 获取日志或调试类型的输出,以便我可以准确地看到它用来执行我要求它执行的所有命令?
原因是因为我想准确了解 GParted 对我的 btrfs 文件系统执行的各种操作,并且我想将这些命令放入脚本中以供其他地方使用。
也许我可以在调试器中运行 GParted 并在它缩小文件系统/分区时逐步执行?
GParted 在线论坛已经关闭,所以我不知道在哪里可以问这个问题?
柔性
使用标准日志规则“ct state new”,我们可以获得有关新会话的详细信息,但是,我们只能获得 LEN 中第一个数据包的数据大小,即
2024-06-15T10:11:31.829667+00:00 deepu kernel: ALLOW INPUT: IN=ens33 OUT= MAC=ff:ff:ff:ff:ff:ff:3a:f9:d3:87:89:65:08:cc SRC=172.16.0.1 DST=172.16.0.255 LEN=72 TOS=0x00 PREC=0x00 TTL=64 ID=32643 PROTO=UDP SPT=57621 DPT=57621
其中,我们看到 72 个字节。
我们如何记录该会话中传输的数据总量?例如,如果这是 100MB 的文件下载,我希望看到 100MB 的下载,加上 TCP 建立的几个小数据包等。
/var/log/user.log
该日志文件的范围是什么?它仅与当前登录的用户相关还是与多个用户以及哪些用户相关?
该日志文件的内容是什么?我应该何时查看它?
所以,我正在使用 tail -F (或 tail --follow=filename)。现在,它的工作方式与宣传的一样,当发生翻转时,它将移动到新文件。
这很棒,可以帮助我跟踪我的日志。问题是我想知道尾部何时从旧文件移动到新文件。
情况如下:
我有一个巨大的日志文件,需要 15 分钟才能处理。现在假设在第 5 分钟,发生了翻转。Tail 打开文件描述,并使用它来完成拖尾过程,然后移动到新的过程。
现在,我保留了上次记录的文件和行的历史记录。我通过增加进程的行数来做到这一点(它的多进程程序,但我还能做什么?)。
问题是,翻转后,新文件从第 0 行开始,但我的 line_number 已经增加到 500 万。因此,对于这个包含 100 个日志的新文件,我将行号存储为 5,000,100。
我使用看门狗来查找文件何时翻转以将行号重置为 0,但如果在初始运行期间发生翻转,例如在 15 分钟运行的 5 分钟标记处,那么我仍然会得到 3mil+ 的数字。
由于 line_number 用于从上次离开的位置继续,以防程序意外终止,这可能意味着数据丢失。
请注意:我正在从 python (CPython) 运行此命令
我一直假设这journalctl
是系统日志的综合聚合器,但我发现这是不正确的。
例如,dmesg
在 systemd 完全激活之前提供系统日志记录,并提供更精确的硬件状态和进程视图。
知识渊博的系统管理员在 Linux 中是否使用其他标准或有用的系统日志记录工具?
我在下面有一个日志文件夹/var/USER/mylogs
,每天都有格式为 的日志文件"DATE-mylogile.log"
。日期格式为"%d-%m-%Y"
.
因此,在我的文件夹中,我有以下日志文件:
12-01-2024-mylogfile.log
13-01-2024-mylogfile.log
14.01-2024-mylogfile.log
...
现在我想使用 logrotate 来旋转日志。我的测试配置如下所示:
/var/USER/mylogs/*.log {
weekly
rotate 4
compress
missingok
dateext
dateformat -%d-%m-%Y
}
但是当 logrotate 运行时,它会为每个日志文件创建 gz-Archive,例如:
12.01-2024-mylogfile.log-12-03-2024.gz
13.01-2024-mylogfile.log-13-03-2024.gz
14.01-2024-mylogfile.log-14-03-2024.gz
但我希望 logrotate 每周创建一个 gz-Archive,其中包括一周中的所有单个日志文件,这样就只有一个 gz-Archive,如下所示:
mylogfile.log-14-03-2024.gz
但我被困住了 - 那么这可能吗?我该怎么做?