Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从systemd';返回systemd单元日志消息列表的Python脚本;中国日报_Python_Logging_System_Monitoring - Fatal编程技术网

从systemd';返回systemd单元日志消息列表的Python脚本;中国日报

从systemd';返回systemd单元日志消息列表的Python脚本;中国日报,python,logging,system,monitoring,Python,Logging,System,Monitoring,我有一个学校作业,我需要编写一个python脚本,返回systemd日志中的systemd单元日志消息列表。此外,它应该是最近的消息(最近24小时和30分钟)。例如,我想获取sshd.service的日志消息。 非常感谢您给我的建议,让我开始学习。以下是您可以遵循的一些步骤: 尝试手动查看logs命令,搜索“systemd logs”会导致出现以下情况: 思考如何从python运行所需的命令。搜索“从python调用外部命令”将导致 然后看看如何解析输出,将其转换为字符串,然后搜索关键字、正则

我有一个学校作业,我需要编写一个python脚本,返回systemd日志中的systemd单元日志消息列表。此外,它应该是最近的消息(最近24小时和30分钟)。例如,我想获取sshd.service的日志消息。
非常感谢您给我的建议,让我开始学习。

以下是您可以遵循的一些步骤:

  • 尝试手动查看logs命令,搜索“systemd logs”会导致出现以下情况:

  • 思考如何从python运行所需的命令。搜索“从python调用外部命令”将导致

  • 然后看看如何解析输出,将其转换为字符串,然后搜索关键字、正则表达式。等等

python系统
systemd
具有官方版本,通常可通过软件包管理器安装,例如

$ dnf install python3-systemd
给软呢帽,或者

$ apt install python3-systemd
对于Debian和衍生品。如果在virtualenv中,您可以使用
pip
直接从Git repo安装:

$ pip install git+https://github.com/systemd/python-systemd
pythonsystemd
有一个清晰、一致的API;下面是一个示例脚本,用于获取过去24小时内为
sshd.service
记录的日记账分录,模拟
journalctl
默认格式:

import datetime
import systemd.journal


if __name__ == '__main__':
    date_last_24h = datetime.datetime.now() - datetime.timedelta(hours=24)
    reader = systemd.journal.Reader()
    reader.seek_realtime(date_last_24h.timestamp())
    reader.log_level(systemd.journal.LOG_INFO)
    reader.add_match(_SYSTEMD_UNIT='sshd.service')
    for entry in reader:
        print(
            '{} {} {}: {}'.format(
                entry['__REALTIME_TIMESTAMP'].strftime('%B %d %H:%M:%S'),
                entry['_HOSTNAME'],
                entry['_SELINUX_CONTEXT'],
                entry['MESSAGE'],
            )
    )
仅使用stdlib查询日记账(
子流程
) 如果不允许安装
python systemd
,请使用适当的查询参数调用
journalctl

import subprocess
import shlex

if __name__ == '__main__':
    result = subprocess.run(shlex.split('journalctl -u systemd-udevd --since today'))
    raw_output = result.stdout
    print(raw_output)
但是,您负责将输出分成几行,并解析出每个条目的相关信息,这可能会很快变得比使用绑定更麻烦。

Hi,第一个链接“未找到”。:/