我正在运行一个备份脚本(rsync 包装器),--log-file
之前我在 rsync 中使用了标志,在切换到StandardOutput/StandardError后,systemd 开始在日志行之间附加“ ^M ”。请问我该如何使用单元文件指令将其删除?
[Unit]
Description=...
Wants=...
[Service]
Type=oneshot
User=adrian
Group=adrian
ReadOnlyPaths=/
ReadWritePaths=/var/log/foo.log
StandardOutput=append:/var/log/foo.log
StandardError=append:/var/log/foo.log
ExecPaths=/usr/local/bin /usr/bin /bin
ExecStart=/usr/local/bin/foo_script.sh
[Install]
WantedBy=multi-user.target
环境设置
echo $LANG
en_US.UTF-8
我尝试了多种输出模式,但结果相同。
这不是由编辑器或其他工具引起的,而是 systemd loggin 正在附加它。使用 rsync 标志在脚本中指定日志记录的原始版本工作正常。journalctl -u <service name>
渲染正常,但 systemd 输出指令正在将其附加在那里。
正如评论中所证实的,回车符不是由 systemd 放入服务的
StandardOutput=
和参数中定义的文件中的,而是由于命令行上存在该选项而自行StandardError=
输出的。rsync
--progress
该
--progress
选项(也可以通过-P
宏选项启用)使 rsync 在传输每个文件时输出字节数和百分比的渐进计数。这些计数输出一行,后跟一个回车符,因此光标保持在终端上的同一行上,下一次更新将覆盖上一次计数。当 rsync 开始传输下一个文件或完成传输会话并输出会话摘要计数时,将发送换行符以移动到终端上的下一行。OP 确认
--progress
从包装脚本中的 rsync 命令中删除该选项也会删除输出日志文件中的回车符,从而解决了该问题。