问题描述
我正在用terraform设置Infracture,并且正在使用xyz.sh bash脚本,该脚本包含我在GPU机器上进行的Deeplearning模型训练。
我的问题是,我如何在不使用SSH的情况下获取xyz.sh bash脚本的日志/完成时间?如果不可能,那么,如果我将ssh插入计算机,如何检查脚本仍在运行或完成
解决方法
当您将user_data
用于EC2实例时,内部发生的事情是Terraform将该字符串发送到EC2 API,然后EC2基础结构通过Instance metadata and user data API将字符串提供给实例。
EC2实例如何(以及是否)使用该字符串取决于您在EC2实例中安装的软件。常见Linux发行版AMI的典型配置是安装cloud-init并将其配置为在首次引导时运行。如果您将AMI与cloud-init一起使用,则将是cloud-init,它从EC2端点检索user_data
字符串并将其作为脚本(或other interpretations)执行,因此cloud- init是负责发出该进程产生的任何日志的系统。
您可以在Testing and debugging cloud-init中了解有关调试cloud-init的更多信息,其中提到cloud-init
默认将日志写入/var/log/cloud-init.log
(某些Linux发行版可能会对此进行自定义),并且您可以使用cloud-init analyze
子命令从该日志文件中检索信息。
Terraform参与此过程只是将给定的user_data
字符串发送到EC2 API,因此Terraform无法了解实例创建后的情况。除非您提交的脚本包括在某处报告进度的步骤,否则除了从EC2实例本身内部检查cloud-init日志文件之外,没有内置的方法来确定该进度。