我有一个学校作业,需要编写一个python脚本,该脚本返回systemd日志中的systemd单位日志消息列表。同样,它应该是最近的消息(过去24小时30分钟)。例如,我想获取sshd.service的日志消息。 感谢有任何提示可以帮助我入门。
答案 0 :(得分:0)
您可以按照以下步骤操作:
尝试手动查看日志命令,搜索“系统日志”将导致您进入类似https://www.linode.com/docs/quick-answers/linux/how-to-use-journalctl/
考虑如何从python运行所需的命令。搜索“从python调用外部命令”会导致您进入https://docs.python.org/3/library/subprocess.html
然后了解如何解析输出,将其转换为字符串,然后搜索关键字,正则表达式。等等。
答案 1 :(得分:0)
python-systemd
systemd
具有官方的python bindings,通常可以通过您的软件包管理器进行安装,例如
$ dnf install python3-systemd
对于Fedora,或
$ apt install python3-systemd
用于Debian及其衍生产品。如果在virtualenv中,则可以使用pip
从Git repo直接安装:
$ pip install git+https://github.com/systemd/python-systemd
python-systemd
具有简洁明了的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'],
)
)
subprocess
)如果不允许您安装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)
但是,您有责任将输出分成几行并解析每个条目的相关信息,这比使用绑定要麻烦得多。