linux exec 命令的输出重定向到日志文件,方法取决于你希望如何处理标准输出和标准错误。 简单来说,你需要使用输出重定向符号 > 和 2>。
直接将命令的标准输出重定向到日志文件,可以使用 > 符号:
exec > mylog.txt mycommand
登录后复制
这会将 mycommand 的所有标准输出写入 mylog.txt 文件。 需要注意的是,exec > mylog.txt 会替换掉当前 shell 的标准输出,后续所有命令的标准输出都会写入 mylog.txt,直到你关闭 shell 或重新设置标准输出。 我曾经因为忘记这一点,调试一个脚本时,所有后续的 echo 命令输出都丢失了,最后不得不重新运行。 所以,建议在脚本中谨慎使用这种方法,或者在执行完需要记录输出的命令后,恢复标准输出:
exec > mylog.txt mycommand exec > /dev/null #恢复标准输出到空设备
登录后复制
如果需要同时记录标准输出和标准错误,则需要分别重定向:
exec > mylog.txt 2>&1 mycommand
登录后复制
2>&1 将标准错误 (文件描述符 2) 重定向到标准输出 (文件描述符 1) 的位置,即 mylog.txt。 这是一种常用的方法,确保所有输出,包括错误信息,都被记录下来。 我曾经在一个监控脚本中,只重定向标准输出,结果漏掉了重要的错误信息,导致问题排查花费了额外的时间。 因此,强烈建议将标准错误也一并重定向。
如果希望追加到已存在的日志文件,而不是覆盖,则使用 >> 符号:
exec >> mylog.txt 2>&1 mycommand
登录后复制
这会将 mycommand 的输出添加到 mylog.txt 文件的末尾。 这在持续监控或日志记录场景下非常有用。 比如,我曾经用这个方法构建一个持续记录系统运行状态的脚本,每天自动追加日志,方便长期追踪。
此外,还需要注意文件权限。 如果 mylog.txt 文件不存在,则需要确保当前用户有权限在该目录下创建文件。 如果文件已存在,则需要确保当前用户有写入权限。 权限问题经常导致日志记录失败,却不容易被发现,调试时需要仔细检查。
总而言之,灵活运用 >、>> 和 2>&1 这些重定向符号,可以有效地将 exec 命令的输出,以及其他命令的输出,准确地记录到日志文件中,从而方便后续的分析和调试。 记住谨慎使用 exec 重定向标准输出,并仔细检查文件权限,可以避免很多不必要的麻烦。
路由网(www.lu-you.com)您可以查阅其它相关文章!