相关疑难解决方法(0)

`unbuffer` 或 `stdbuf` 用于删除标准输出缓冲?

unbuffer(1) 和 stdbuf(1) 之间有区别吗?从我收集的信息来看,unbuffer 不仅仅是在开始时调用 libc 函数 set(X)buf 的“最大努力”,然后让事情发生?

io utilities buffer stdout

16
推荐指数
1
解决办法
6069
查看次数

Systemd Python 服务未将所有输出发送到 syslog

我有一个自定义服务,并明确要求将所有 stdout 和 stderr 发送到配置文件中的 syslog,但是只有部分输出出现在 syslog 和日志中(它们是一致的)。

我绝望了,我在服务文件中做了以下事情:

StandardOutput=syslog+console
StandardError=syslog+console
Run Code Online (Sandbox Code Playgroud)

该服务是一个 python 脚本,我使用“打印”语句(Python 2.7)写入标准输出。这些项目似乎丢失了,而其他命令输出正确写入 syslog 和 journald。如果我以交互方式运行脚本,一切都会按预期出现在标准输出中。

我的知识缺乏什么?

python syslog systemd

8
推荐指数
1
解决办法
6321
查看次数

从我的服务中更快地获取 systemd 服务日志

我有一个 systemd 服务定义如下,它工作正常:

[Unit]
Description=my service
After=network.target

[Service]
User=myuser
Group=mygroup
WorkingDirectory=/home/myuser/myapp
Environment="PATH=/home/myuser/myapp/.venv/bin"
ExecStart=/home/myuser/myapp/.venv/bin/python3 /home/myuser/myapp/run.py
Restart=on-failure

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

这是一个基于 Flask 框架的 Python Web 应用程序。通常在应用程序的标准输出中,我可以看到传入的请求“实时”,我的意思是当我像python run.py.

现在启动服务后,我想跟踪应用程序的日志,我这样做:

sudo journalctl -f -u my_app.service
Run Code Online (Sandbox Code Playgroud)

并且传入的日志非常慢 - 有时它们需要几分钟或更长时间才能出现在日志中。之后它们都有适当的时间戳,所以它们并不是消失了,它们确实消失了,而是经过了很长时间。

我试过的:

  • 将 systemd 服务输出重定向到文件:

    StandardOutput=file:/var/log/my_app/output.log

    StandardError=file:/var/log/my_app/error.log

    运气不好 - 他们保存得很好,但速度一样慢

  • 尝试将 journalctl 日志转储到离线更快的设置SyncIntervalSec从默认5m5s- 也没有帮助

有什么方法可以更快地将这些日志从我的应用程序传递到 journald?我在使用其他服务(例如系统身份验证服务)时没有问题 - 我可以立即看到记录。我的journald.conf文件有默认参数(除了上面的一个),我的 systemd 是版本 237,我运行的是 Ubuntu 18.04。

logs systemd journalctl systemd-journald

5
推荐指数
1
解决办法
2504
查看次数

标签 统计

systemd ×2

buffer ×1

io ×1

journalctl ×1

logs ×1

python ×1

stdout ×1

syslog ×1

systemd-journald ×1

utilities ×1