如何跟踪bash脚本 – 退出状态及其失败原因
有时候我需要像这样运行命令:
cat file.txt | awk ' NR%4 == 2 { print $1 }' | sort | uniq -c | sort -gr >>output.txt & 大文件(2-32 GB大小).我在晚上启动命令,当我早上来的时候,output.txt有时是空的,进程不再运行了. 请问,我该如何追踪正在发生的事情?为什么以及何时我的命令失败?我知道管道正在运行,因为有时它只是成功完成. 非常感谢! 更新: 有没有办法发现我的过程实际上被杀了?谢谢. 解决方法
第一步,将该脚本封装在一个文件中,而不是直接在终端上运行(并在我们使用它时失去UUOC奖励).
#!/bin/bash { awk 'NR%4 == 2 { print $1 }' file.txt | sort | uniq -c | sort -gr >>output.txt } 2>error.log 这将捕获文件error.log中的所有错误消息.然后,您可以添加诊断信息. #!/bin/bash { date >&2 set -x awk 'NR%4 == 2 { print $1 }' file.txt | sort | uniq -c | sort -gr >>output.txt date >&2 } 2>error.log 现在你已经获得了时间信息 – 它何时开始以及何时完成.由于你是bash,你可以安排在管道中捕获每个进程的退出状态,这样你就可以准确地知道哪些命令退出了哪个状态.您可能会或可能不会获得有关哪个进程被终止的消息(如果进程被外部信号杀死),但如果进程自行死亡,它应该在标准错误上打印一条消息(这就是它的用途,以及为什么将错误打印到标准错误而不是标准输出是至关重要的. 使用此脚本,您将标准输出发送到output.txt,标准错误发送到error.log;该脚本不使用标准输入(数据来自file.txt).因此,您可以使用nohup或仅使用&没有任何疑虑. 您可能更喜欢将名称file.txt命名为命令行参数;您可能希望使输出和日志文件可配置.您可能更喜欢日期输出的不同格式.所有这些都是可以调整的.但关键是将它放入shell脚本中,以便您可以直接和系统地处理这些事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |