如何将minicom/tmux的所有输出定向到journald
解决minicom/tmux日志记录与journald兼容问题
1. 给tmux输出添加时间戳并同步到journald
默认的tmux pipe-pane仅能追加日志,既无时间戳也无法接入journald,可通过以下方式改进:
方法一:用ts添加时间戳并写入journald
先安装moreutils包(提供ts命令),执行以下命令:
tmux pipe-pane -o 'ts "[%Y-%m-%d %H:%M:%S]" | logger -t minicom-tmux'
ts负责在每一行日志前生成标准时间戳logger -t minicom-tmux将日志推送至journald,minicom-tmux作为日志标识,方便后续过滤查询
后续可通过journalctl -t minicom-tmux直接查看带时间戳的可读日志。
方法二:无ts时用awk生成时间戳
若未安装moreutils,可借助awk内置时间函数实现:
tmux pipe-pane -o 'awk "{print strftime(\"[%Y-%m-%d %H:%M:%S]\"), \$0}" | logger -t minicom-tmux'
2. 消除journalctl中的转义序列/Blob数据
服务进程调用minicom时出现的转义序列或Blob数据,源于minicom默认输出终端控制码,可通过两种方式解决:
方式一:让minicom输出纯文本
启动minicom时指定-t dumb参数,强制使用哑终端类型,大幅减少控制码输出:
minicom -D /dev/ttyUSB0 -t dumb
方式二:过滤已有的转义序列
安装ansi2txt包,用它过滤minicom输出中的终端控制码:
minicom -D /dev/ttyUSB0 2>&1 | ansi2txt
3. 服务化运行的完整配置(以systemd为例)
若要通过systemd服务运行minicom并接入journald,创建/etc/systemd/system/minicom.service文件:
[Unit] Description=Minicom Serial Port Service After=multi-user.target [Service] ExecStart=/bin/bash -c "minicom -D /dev/ttyUSB0 -t dumb 2>&1 | ansi2txt | logger -t minicom-service" Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
执行以下命令启动并启用服务:
systemctl daemon-reload systemctl start minicom.service systemctl enable minicom.service
后续通过journalctl -u minicom.service即可查看干净的带时间戳日志。
内容的提问来源于stack exchange,提问作者WindowsWeenie
相关产品推荐
相关产品推荐

