gpt4 book ai didi

amazon-web-services - 在后台作业完成之前,带有Powershell的SSM发送命令不会完成

转载 作者:行者123 更新时间:2023-12-02 23:50:13 25 4
gpt4 key购买 nike

我正在使用SSM send-command在Windows EC2实例上启动Tomcat进程。

例如:

aws ssm send-command --instance-id i-xxxx --document-name "AWS-RunPowerShellScript"
--parameters 'commands=["startup.bat"]'

这确实确实启动了Tomcat,但是我注意到SSM命令调用本身一直在进行中,直到我最终关闭Tomcat,这时它立即成功。

我的直觉是,关于SSM在任何生成的子进程上运行Powershell块的方式(对于Tomcat,为 start java ...)。不过,我认为这并不是Tomcat甚至Java所独有的。

有没有办法让Powershell退出,而使子进程在后台运行?

最佳答案

如果要在PowerShell中启动一个独立的进程-即使在创建过程终止后仍保持 Activity 的状态,请使用 Start-Process cmdlet:

Start-Process aws -ArgumentList @'
send-command --instance-id i-xxxx --document-name AWS-RunPowerShellScript --parameters commands=["startup.bat"]
'@

请注意,使用(文字)here字符串( @'<newline>...<newline>'@)使嵌入引号更容易;有关PowerShell字符串文字的信息,请参见 this answer的底部。

尽管 -ArgumentList可以接受参数数组,但是从PowerShell 7.0开始,这些参数转换为命令行的方式已被破坏(并且由于向后兼容性的考虑,可能无法得到解决;请参见 this GitHub issue)。

因此, 最好使用带有嵌入引号的单个参数。

请注意,在调用外部程序(例如 ")时, 应该仅使用双引号(aws)作为参数定界符。[1]

[1]通过直接调用外部程序,您可以随意使用任何一种引用样式,因为PowerShell在幕后重建命令行时仅使用 "引用参数(如果需要的话)。在 Start-Process的情况下, -ArgumentList值传递到.NET API( System.Diagnostics.ProcessStartInfo ),在此不执行任何此类转换。

关于amazon-web-services - 在后台作业完成之前,带有Powershell的SSM发送命令不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61149170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com