Python脚本无法输出stdout到journald解决方案
发表于|更新于|系统
|浏览量:
现象
当一个 systemd 服务的执行内容为一个python脚本时,在journalctl中无法观察到python脚本的stdout内容。
原因
这是因为 Python 默认对 stdout 使用行缓冲,但在 systemd 环境下(非交互式终端)变成了全缓冲,导致日志在进程退出前才刷新。(骗你的,甚至可能退出了也不刷新)
解决方案
两种解决方案:
1. 添加环境变量
最方便的一个方案,添加一个PYTHONUNBUFFERED(Python unbuffered)环境变量,可以直接解决这个问题。
systemd单元文件支持Environment参数,添加起来很方便。
1 | [Service] |
2. 手动刷新
在脚本中每次 print 后手动刷新。例如,添加 sys.stdout.flush(),或使用 print(..., flush=True)。
(我没试过方案2,方案1直接把事情解决了哈哈哈)
至此,问题解决。
文章作者: 橙子冰棒
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 橙子冰棒的博客!
相关推荐
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-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。 方案以下代码...
2025-05-05
Linux安装Stable Diffusion WebUI为systemd服务
本文章介绍了在Ubuntu上使用Conda环境部署Stable Diffusion WebUI,并将其部署为systemd系统服务的方法。与此同时,还包含这些操作的要点。 Stable Diffusion WebUI(简称SD WebUI,下文简称SD)的本地部署一直是很热的话题,但是在Linux上的服务端部署一直是一个难题。不像在Windows上,我们有秋叶大佬开发的绘世启动器一键懒人包,在Linux上我们必须手动下载Stable Diffusion WebUI并进行配置。 为什么要用Linux?首先显而易见的是,Linux下SD的性能浪费更少。我之前使用秋叶的整合包时,网页面板每次都需要缓冲半分钟才能打开,而使用Linux时几乎是秒开。在绘图性能上也是Linux略优,这在许多人的测试中均有体现。 其次,SD陷在CUDA生态里面,在Windows上使用A卡和I卡运行SD是使用DirectML兼容层转接的,存在比较明显的性能损耗。而在Linux上,A卡可以使用ROCm来运行SD,可以满血运行。 第三,SD的启动相当耗时,并且由于会预分配显存(将模型一次性搬进显存)导致显存爆满,显...
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: ~/.config/gtk-3.0/settings.ini12[Settings]gtk-im-module = fcitx 请勿设置GTK_IM_MODULE环境变量。 为了支持Qt,设置以下环境变量: Qt5与非KDE桌面也需要这些环境变量。 /etc/environment12QT_IM_MODULES=wayland;fcitxQT_IM_MODULE=fcitx 为了支持其他的XWayland应用程序: /etc/environment1XMODIFIERS...
2025-07-10
Ubuntu netplan配置固定接口
我不知道各位有没有碰到过类似的问题:你刚刚把你的Ubuntu计算机加好新硬件,插电开机(冷启动),然后SSH一登,Connection Timeout,回到本地一看,netplan给你写了份新的配置文件导致IP不同…… 究其原因,一个比较有说服力的解释是某些玄学的网口卸载逻辑导致冷启动时系统误以为这个接口已经有网口占着了,然后就自己创建了一份新的配置。实测下来这种情况基本上只在Ubuntu Desktop上出现,因为ubuntu-desktop才有这么一套自动配置机制。 想要解决其实相当简单,溜一遍参考文档,找到了一个好东西:match键。通过这个玩意儿,我们可以直接将一份netplan配置绑定到指定MAC地址的设备上(当然也可以通过设备名绑定,但是那样不大符合我们的初衷)。 例如,我的netplan配置文件(位于/etc/netplan下面的某个yaml文件)是这样的: 123456789101112network: version: 2 renderer: NetworkManager ethernets: enp2s0: match: ...
2026-01-17
ArchLinux将ESP分区从/boot改挂到/efi
btrfs 因其快照功能,成为许多 Arch Linux 用户在滚动更新中的重要保障。然而,若 ESP 分区挂载不当,内核回滚后可能导致系统无法启动。 为什么会这样?在当代Linux的设计中,统一内核镜像(UKI,可以简单的认为是一个Linux内核的可执行文件)是保存在/boot目录下的,每次你更新内核时,UKI都会被覆盖为新的内核镜像。但是,ESP分区(一般都)是FAT32文件系统,不受btrfs的快照保护。如果你把根目录回滚了,但是ESP还是新的内核,找不到匹配的headers和其他必要文件,就会直接导致系统崩溃。 怎么看有没有挂载对?终端里面lsblk一下,找到你的系统所在的物理硬盘。其中有一个很小的分区,大小约在400MB至1GB左右,一般排在你系统卷的前面。这就是ESP(EFI)分区。在这行的右边会显示这个分区的挂载点,如果显示/efi或者/boot/efi(不建议,但不影响回滚,就别去动它了)就是没问题的;如果直接一个/boot写在那里,那就是我们要解决的问题。 注意事项本文适用前提:你的Linux系统盘用的是btrfs,并且引导模式是UEFI。 以下情况无需担心本文...
评论
公告
欢迎来到橙子冰棒的博客!你真是找到宝了~
