【发布时间】:2020-05-03 01:13:47
【问题描述】:
我在尝试让 Rsyslog 的“omprog”模块与我的 python (2.7) 代码交互时遇到问题。 Rsyslog 应该向 python 的标准输入发送所需的消息,但它没有收到任何东西。我想知道是否有人在这个输出模块上取得了更好的成功?
Rsyslog.conf
module(load="omprog")
template(name="sshmsg" type="string" string="%msg%")
if ($programname == "myprogram") then {
action(type="omprog"
binary="/usr/sshtrack.py"
template="sshmsg")
}
如果我用包含下面一行的测试 shell 脚本替换二进制文件,它可以工作
test.sh
!#/bin/sh
cat /dev/stdin >> /var/log/ssh2.log
我还尝试使用
将 shell 脚本中的标准输入读入变量var="$(</dev/stdin)"
和
var="$(cat /dev/stdin)"
以上都没有导致 var 包含任何内容
最后,当试图从 python 脚本中读取标准输入时,我什么也没得到。有时,它会显示资源不可用 (errno 11) 错误消息。
sshtrack.py
#!/usr/bin/python
import sys
f = open("/var/log/ssh2.log", "a", 0)
while True:
f.write("Starting\n")
for line in sys.stdin:
f.flush()
msg = line.strip()
if not msg:
break
f.write(msg)
f.write("\n")
f.close()
这个问题似乎类似于can not read correctly from STDIN,除了添加一个非阻塞标志没有任何作用。
【问题讨论】:
标签: python-2.7 stdin rsyslog