通过管道传送到邮件会产生新行而不是被覆盖的行

通过管道传送到邮件会产生新行而不是被覆盖的行

我们在多台服务器上运行 maldet,并将 cronjobs 的输出通过管道传输到邮件地址以检查结果。对于 9 台服务器,此方法运行良好,但对于第 10 台服务器,输出有所不同。

通常我们会得到屏幕的最后一个输出,但对于有问题的服务器,我们会得到输出的每一行。 Maldet 为其扫描的每个文件重写 1 行,以便将屏幕上行的开头的返回输出到邮件中的新行。

2个例子:

好的:

maldet(30251): {scan} setting nice scheduler priorities for all operations: cpunice 19 , ionice 6
maldet(30251): {scan} file list completed in 172s, found 3850 files...
maldet(30251): {scan} found clamav binary at /usr/bin/clamscan, using clamav scanner engine...
maldet(30251): {scan} scan of / (3850 files) in progress...

**maldet(30251): {scan} scan completed on /: files 3850, malware hits 0, cleaned hits 0, time 316s** maldet(30251): {scan} scan report saved, to view run: maldet --report 160707-0016.30251

坏的:

maldet(2198): {scan} 3577/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3578/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3579/3587 files 
scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3580/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3581/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3582/3587 files scanned: 0 hits 0 
cleaned[1Gmaldet(2198): {scan} 3583/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3584/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3585/3587 files scanned: 0 hits 0 cleaned[1Gmaldet
(2198): {scan} 3586/3587 files scanned: 0 hits 0 cleaned[1Gmaldet(2198): {scan} 3587/3587 files scanned: 0 hits 0 cleaned
maldet(2198): {scan} scan completed on /: files 3587, malware hits 0, cleaned hits 0, time 654s
maldet(2198): {scan} scan report saved, to view run: maldet --report 160707-0045.2198

正如您所看到的,输出中提到了每个文件。但仅限于重定向到邮件时。不在屏幕上。

我们正在运行 CentOS Linux 版本 7.0.1406(核心)

答案1

写入屏幕时,CR 字符会使光标移动到行首,从而导致后续字符覆盖之前的字符。但是,maldet 仅在写入终端时才应使用此机制(以及示例中可见的控制代码)。真正的问题是为什么那个奇怪的服务器上的 maldet 认为它的输出是屏幕而不是管道。

相关内容