我从 10 多个不同的目录运行 10 多个不同的命令,我需要一个更好的流程来跟踪所有内容。
我进行了大量的调试,并且经常需要并行处理多个问题。我有很多脚本需要 30-240 分钟才能运行,例如:
- 创建工作区
- 编译代码
- 运行代码以通过调试信息重现问题
- 运行资质
我发现自己在问以下问题:
- 什么正在运行?
- 为什么它在运行?当我开始编写脚本时,我想实现什么目标?
- 什么时候完成了运行?退出代码是什么(通过/失败)?
目前,我在一个文本文件中记录我在每个目录中所做的事情,并手动检查终端或日志文件以获取所有内容的运行状态。看来应该有更好的办法。
答案1
如果问题是您发现在从一个任务跳到另一个任务时很难跟踪您正在做的事情,您可能需要花时间考虑使用诸如多路复用器和/或屏幕。这些是虚拟终端窗口服务器,允许您在其中设置终端并为其命名。这允许您在终端上放置一些上下文并保持多个终端运行,而不会弄乱您的桌面。
我通常使用 screen,所以我更熟悉它的工作流程,但一般来说,我设置一个 screen 会话,如下所示:
screen -S appX
然后我像这样连接到它:
screen -r appX
然后,在 appX 的空间内,您可以为与 appX 相关的工作设置不同的选项卡/窗口。我可能会设置一个名为“编译”的窗口,而另一个可能是“日志”,我在其中跟踪应用程序的日志文件。然后,我可以使用组合键Ctrl+A+Ctrl+A从一个选项卡/窗口移动到另一个选项卡/窗口,或者您可以拆分终端,使其中一个位于终端的上 1/2 部分,而另一个位于下 1/2 部分。
答案2
如果您多次运行类似的命令,请将类似的部分放入 shell 脚本或 makefile 中。为脚本或目标指定有意义的名称。这样,当您查看各个终端正在执行的操作时,命令行(可能还包括主机名和当前目录)将清楚地告诉您需要了解的所有信息。
设置终端的标题以显示当前目录并从$PROMPT_COMMAND
(bash) 或preexec
(zsh) 运行命令。这样您就可以直接在窗口列表上了解正在发生的情况,而无需切换到窗口。当命令终止时,将标题设置为当前目录和最后一个命令的退出状态 ( $?
)。
记录产生输出的所有命令,并确保日志包含成功或失败的指示(如果不是自然发生,则以 结束echo $?
)。此日志记录应包含在您的包装脚本中(见上文)。这样,你就可以回顾过去,看看之前发生了什么。如果您发现有用的话,也记录开始和完成的日期。
答案3
直接回答问题:
- “跑什么?”
ps afux
,pstree
类似的可以让您很好地了解当前正在运行的内容。如果您以合理的方式命名脚本,应该很容易从中获得概述。你也可以为您的终端窗口命名使用printf "\033]0;Window title\007"
- “它为什么要运行?当我启动脚本时我想要完成什么?”您可以将命令输出重定向到根据您正在处理的问题命名的日志文件(
tee
如果您也想在运行时查看它,则可以选择使用)。 - “什么完成了运行以及何时完成?退出代码是什么(通过/失败)?”通过将任务结束时的
time
和echo $?
输出记录到相同的文件中(甚至更好,使其成为脚本的标准部分),您可以很好地了解最后发生的情况。
答案4
任务假脱机程序是 Linux 的通用作业管理系统。
它允许您使用 1 个或多个队列来启动命令。新命令可以依赖于先前命令的完成。您可以使用标签来跟踪任务中的元信息。任务后台处理程序还具有已完成任务的电子邮件通知。您可以查看所有正在运行和已完成的命令。