I am using SSM send-command to start a Tomcat process on a Windows EC2 instance.
for example:
aws ssm send-command --instance-id i-xxxx --document-name "AWS-RunPowerShellScript"
--parameters 'commands=["startup.bat"]'
This does indeed start Tomcat but I noticed that SSM command invocation itself is stuck in progress until I eventually shut Tomcat down, at which point it immediately succeeds.
My hunch is that something about the way SSM runs Powershell blocks on any spawned child processes ( start java...
in the case of Tomcat). I don't think this is unique to Tomcat or even Java, though.
Is there a way I can get Powershell to exit, leaving the child processes running in the background?
If you want to start an independent process in PowerShell - one that stays alive even after the creating process terminates - use the Start-Process
cmdlet:
Start-Process aws -ArgumentList @'
send-command --instance-id i-xxxx --document-name AWS-RunPowerShellScript --parameters commands=["startup.bat"]
'@
Note the use of a (literal) here-string ( @'<newline>...<newline>'@
) to make embedding quotes easier; see the bottom section of this answer for information about PowerShell string literals.
While -ArgumentList
can accept an array of arguments, the way these are translated into a command line is broken as of PowerShell 7.0 (and will likely not get fixed due to backward compatibility concerns; see this GitHub issue ).
Therefore, it is best to use a single argument with embedded quoting .
Note that you should only use double quotes ( "
) as argument delimiters when calling external programs (such as aws
in this case). [1]
[1] With direct invocation of an external program, you're free to use either quoting style, because PowerShell, when it rebuilds the command line behind the scenes, uses only "
to quote arguments (if needed at all). In the case of Start-Process
, the -ArgumentList
value is passed through to a .NET API ( System.Diagnostics.ProcessStartInfo
), where no such translation is performed.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.