0

我遇到了一个场景,我想在自定义 Azure VM 中停止当前正在执行的 java 进程。VM 是由我们的 Infra 配置的 ubuntu 机器。

我正在构建一个 Azure - 持续部署管道,我想在其中部署 VM 中的最新版本。但在我可以部署最新的构建之前,我需要关闭之前构建的当前正在执行的 Java 进程。

我使用“SSH 上的命令”来触发带有 java 进程的进程 ID 的“kill”信号,但 Azure 禁止在管道中使用“kill”命令。

日志

==============================================================================
Task         : SSH
Description  : Run shell commands or a script on a remote machine using SSH
Version      : 0.165.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/ssh
==============================================================================
Trying to establish an SSH connection to ***@<HOST>:22
Successfully connected.
chmod +x "./sshscript_158452036****"
"./sshscript_158452036****"
 ========** Stop currently executing process: 4381

##[error]./sshscript_158452036****: line 5: kill: (4381) - Operation not permitted

有没有其他方法可以优雅地关闭 Java 进程。或使用其他解决方案实现 CD。我不打算对部署进行 Dockerize 化。

谢谢 !

4

1 回答 1

0

“不允许操作”错误并非来自 Azure。相反,这意味着您的 ssh 用户无权终止 VM 上的该进程。因此,现有进程由与您用于 ssh 的用户不同的用户运行。

可能的解决方法 - 在旧部署中包含某种 cron,它会扫描触发器文件(比如 /tmp/killmyprocess.trigger),如果文件存在 - 会杀死它。

然后在你的新部署中,你所做的就是做

touch /tmp/killmyprocess.trigger
于 2020-03-18T21:45:01.973 回答