Python脚本无法输出stdout到journald解决方案
发表于|更新于|系统
|浏览量:
现象
当一个 systemd 服务的执行内容为一个python脚本时,在journalctl中无法观察到python脚本的stdout内容。
原因
这是因为 Python 默认对 stdout 使用行缓冲,但在 systemd 环境下(非交互式终端)变成了全缓冲,导致日志在进程退出前才刷新。(骗你的,甚至可能退出了也不刷新)
解决方案
两种解决方案:
1. 添加环境变量
最方便的一个方案,添加一个PYTHONUNBUFFERED(Python unbuffered)环境变量,可以直接解决这个问题。
systemd单元文件支持Environment参数,添加起来很方便。
1
2
[Service]
Environment="PYTHONUNBUFFERED=1"2. 手动刷新
在脚本中每次 print 后手动刷新。例如,添加 sys.stdout.flush(),或使用 print(..., flush=True)。
(我没试过方案2,方案1直接把事情解决了哈哈哈)
至此,问题解决。
文章作者: 橙子冰棒
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 橙子冰棒的博客!
相关推荐
2025-05-05
Linux部署Stable Diffusion WebUI为系统服务(uv/Conda)
本文介绍了在Ubuntu上部署Stable Diffusion WebUI,并将其配置为systemd系统服务的方法。推荐使用Astral uv作为虚拟环境管理工具,同时也会提供conda方案作为备选。 Stable Diffusion WebUI(简称SD WebUI,下文简称SD)的本地部署一直是很热的话题,但在Linux上的服务端部署一直是一个难题。不像在Windows上有绘世启动器这样的懒人包,在Linux上我们必须手动下载并进行配置。 (2026/7/9更新) Stable Diffusion WebUI的master branch已经两年没有更新,依赖链出现严重损坏。请使用dev分支,或者如果愿意学习“工作流”玩法的话(其实也没有复杂多少,而且扩展性强得多),可以改用ComfyUI。 为什么要用Linux?首先显而易见的是,Linux下SD的性能浪费更少。我之前使用秋叶的整合包时,网页面板每次都需要缓冲半分钟才能打开,而使用Linux时几乎是秒开。在绘图性能上也是Linux略优,这在许多人的测试中均有体现。 其次,SD陷在CUDA生态里面,在Windows上使用A卡...
2026-08-10
Linux通过systemd指定网卡名称
这是netplan方案在其他发行版上不适用的情况下的终极解决方案,适用于有systemd的发行版。没有systemd的发行版可以使用udev规则。 没想到网卡名称随便乱动的毛病不只在Ubuntu上有,几乎所有发行版都有,当然也有可能是我设备犯了一些什么毛病导致的。 通用的方案是使用systemd link文件,通过MAC地址来匹配网卡。原理是利用systemd作为PID1的特殊权限,在内核工作完成后、所有应用与服务启动前匹配并修改网卡名称。这是最现代、最清晰的方法。 第一步:找到网卡的 MAC 地址首先,使用 ip link 命令列出所有网络接口,找到你想要修改名称的网卡及其 MAC 地址。 1ip link show 输出会类似这样: 122: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff...
2025-02-13
让systemd直接管辖aria2服务
这篇省不了流,省了你也不知道怎么解决。 前段时间开始玩Ubuntu当服务器用,用apt装了个Aria2,又装了个AriaNG拿来挂下载。 然后问题来了,原版Aria2单文件下载线程数限死在16线程,相比Motrix自带的修改版Aria2慢如狗。然后就是扒拉下来Aria2源文件改了自己编译,又因为技术力不够摸不清咋用make编译…… 最后找到了这个才解决:P3TERX/Aria2-Pro-Core: Aria2 static binaries for GNU/Linux with some powerful feature patches. | 破解无限线程 防掉线程优化 静态编译 二进制文件 增强版 把编译好的文件丢到/usr/bin下面,顺带按照教程放了个SysV脚本到/etc/init.d/下面让它自己生成服务配置文件。 然后问题又双叒叕来了,这个Aria2三天两头崩溃,systemctl就给你挂个running(exited)也不重启,手动重启服务又连不上,只能先stop再run,烦死个人。 所以最后就决定换成原生systemctl服务,直接管辖aria2c。 方案以下代码...
2026-06-24
sched-ext在不同电源模式下的切换方法
sched-ext简介自 Linux 6.12 起,内核开始支持名为 sched-ext 的协议,它的作用是,允许用户使用自定义的CPU调度器覆盖内核原有的调度器,以实现更具有场景针对性的调度策略。与此同时,这个调度器可以在运行时快速热切换,而相比之下原本的调度器写死在内核中,想要更改只能重编译内核。此功能目前主要由 scx-scheds 程序实现。 我的选择我在我的 ArchLinux 笔记本上使用的是 scx_bpfland 调度器,这个调度器对12代的大小核有比较好的优化: 为什么适合大小核:bpfland 基于自愿上下文切换来精准识别“交互式任务”(如鼠标点击、窗口拖动、打字)。它会自动将这些高优先级交互任务提升至高性能大核(P核),同时将后台编译、日志同步等非交互任务挤压到能效小核(E核)上运行。 功耗表现:它的调度算法非常“克制”,不会盲目拉高CPU频率。在待机或轻载办公时,任务会尽可能留在E核,P核保持深度休眠,对笔记本续航非常友好。 交互流畅度:公认的“丝滑感”调度器,桌面响应速度极佳,在 sched_ext 社区是笔记本用户的口碑首选。 状态:生产就绪,...
2025-10-25
Fcitx5输入法兼容性配置杂谈
本文包括:Arch Linux上KDE Wayland环境下Fcitx5输入法的兼容性配置,包括但不限于:Flatpak应用,Qt应用(如wemeet),Electron应用(如新QQ)。 Wayland基础配置(共通)本段更新于2026/4/21,此时ArchWiki已更新,主要修改了关于GTK_IM_MODULE与QT_IM_MODULE的设置问题。 我相信没人还在用X11了吧?(笑) Wayland下的fcitx5是基本开箱即用的,本段的配置是用于正常使用XWayland应用程序的。 为了支持GTK: 12[Settings] gtk-im-module = fcitx 请勿设置GTK_IM_MODULE环境变量。 为了支持Qt,设置以下环境变量: Qt5与非KDE桌面也需要这些环境变量。 12QT_IM_MODULES=wayland;fcitx QT_IM_MODULE=fcitx 为了支持其他的XWayland应用程序: 1XMODIFIERS=@im=fcitx Flatpakflatpak 沙箱应用启动时不会读到 ~/.config/gtk-3.0/sett...
2026-01-27
ATK设备在Linux上无法使用网页驱动的解决方案
前言最近因为有移动办公的需求,买了个ATK的无线机械键盘(感叹机械键盘市场真卷,200不到的键盘做的比我一年半之前花将近2000买的好)。选ATK一个很重要的点就是他们有支持Linux的网页面板驱动。 到手之后有线连接,打开浏览器,提示只支持Chrimium内核的浏览器。正常,Chromium提供的开发接口确实比Firefox多。 切到Chromium,点击新增设备,左上角弹出的窗口中选中ATK键盘,确定。随后我就傻眼了:在屏幕中间显示的键盘是正确的,但是状态是“休眠”,无法进行设置。 原因网上搜索了一通,发现我想要说的前人们都说过了有人已经踩过坑了: Linux 按照里面的修改USB/HID设备权限部分临时测试了一下,发现确实是设备权限的问题,修改为可写之后就能正常使用了,于是准备用里面提供的方法来将配置持久化。然而,进行到添加当前用户到plugdev组这一步时,我发现我当前的ArchLinux并没有plugdev这个组。抱着怀疑的心态查了一下ArchWiki,果然发现有问题: OWNER、GROUP 和 MODE udev 值可用于提供访问权限,但会遇到如何使设备对所有用户可...
评论
公告
欢迎来到橙子冰棒的博客!你真是找到宝了~
