Остановить процесс Java, запущенный в режиме Custom Azure -VM - PullRequest
0 голосов
/ 18 марта 2020

Я попал в сценарий, в котором я хочу остановить текущий процесс java в пользовательской Azure VM. Виртуальная машина - это машина Ubuntu, настроенная нашим Infra.

. Я создаю конвейер непрерывного развертывания Azure, в котором я хочу развернуть последнюю сборку в ВМ. Но прежде чем я смогу развернуть последнюю сборку, мне нужно остановить текущий выполняемый Java процесс предыдущей сборки.

Я использовал «Command Over S SH», чтобы вызвать сигнал «kill» с идентификатор процесса java, но Azure запрещает использование команды kill в конвейере.

Logs

==============================================================================
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 Процесс. ИЛИ Получите компакт-диск с другим решением. Я не планирую Dockerize развертывания.

Спасибо!

1 Ответ

0 голосов
/ 19 марта 2020

Ошибка «Операция не разрешена» не приходит от Azure. Вместо этого это означает, что у вашего пользователя s sh нет прав на уничтожение этого процесса на виртуальной машине. Таким образом, существующий процесс запускается другим пользователем, нежели тот, который вы используете для s sh.

Возможный обходной путь - включите некоторый тип cron со своим старым развертыванием, который будет сканировать файл триггера (скажем, / tmp / killmyprocess.trigger), и если файл присутствует - уничтожит его.

И тогда в вашем новом развертывании все, что вы делаете, это просто делаете

touch /tmp/killmyprocess.trigger
...