【问题标题】:Stop a Java Process running in Custom Azure-VM停止在自定义 Azure-VM 中运行的 Java 进程
【发布时间】:2020-03-19 05:45:01
【问题描述】:

我遇到了一个场景,我想在自定义 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 部署。

谢谢!

【问题讨论】:

    标签: java azure devops continuous-deployment azure-vm


    【解决方案1】:

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

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

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

    touch /tmp/killmyprocess.trigger
    

    【讨论】:

    • 感谢您的建议。事实上,这个问题是因为不同的用户试图杀死 exec。过程。我通过使用与我构建管道的同一用户执行该过程来解决此问题。现在一切正常。
    最近更新 更多