我遇到了一个问题,sudo iscsiadm -m 发现 -t st -p知识产权-l将日志记录到服务器上所有终端的 dmesg 中。
该命令从 Java 应用程序运行,使用:
Runtime.getRuntime().exec("/bin/bash", "-c", "sudo iscsiadm -m discovery -t st -p *IP* -l");
我尝试了以下方法:
- 附加到命令
> /dev/null 2>&1
末尾iscsiadm discovery...
- 从返回的进度中捕获输入流(
process.getInputStream()
和process.getErrorStream()
) - 附加
> /dev/null 2>&1
到启动 Jar 的软件。
上述任何尝试都无法阻止跨所有虚拟终端进行日志记录。日志开始[some_num.some_dec] LOG_MESSAGE
显示它正在输出到dmesg
?如果这是真的,我该如何防止这种情况发生?目前,它使系统无法调试,因为它正在终端提示上打印。
谢谢
答案1
iscsiadm 控制内核 iSCSI 子系统,消息实际上并非来自程序 - 它们直接来自内核驱动程序。
使用dmesg -n warning
或启动以loglevel=4
减少无用消息的数量。
答案2
问题已修复。
事实证明,不是 iscsiadm 记录到 dmesg,而是随后的 mount 命令,因为 blockdev 不存在。
我已经修改了我的 Java 代码,然后尝试iscsiadm -m discovery...
运行iscsiadm -m session
以确定在安装之前适当的设备是否具有连接。