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