2

Эта проблема возникает довольно часто при загрузке файлов .war или .ear, которые всего лишь немного больше, чем файл .zip, на удаленный сервер и развертывает их на сервере приложений.

Обычно на этапе разработки сервер приложений находится в режиме «горячего развертывания», что означает, что сам сервер приложений ожидает изменений в определенном каталоге, если он распознает, что допустимый файл приложения (.ear или .war) был удален в нем, то он распаковывается и развертывается как Java-приложение.

Бывает, что во время загрузки, и обычно это делается с помощью таких инструментов, как ant или maven непосредственно из среды разработки, сервер приложений начинает развертывание, чтобы обнаружить позже, чем поврежденный zip-файл, поскольку загрузка не была завершена еще.

Обходной путь, который я нашел, состоит в том, чтобы загрузить во внешний каталог, затем подключиться к ssh и mv файл в папку «горячего развертывания».

Есть ли у вас какие-либо предложения о том, как с этим бороться? Я не системный администратор, но мне хотелось бы иметь своего рода сценарий оболочки (может быть, запущенный в cron), который прослушивает каталог и, когда загрузка идет (через scp), подождите, пока она не закончится, затем выполните команду mv к каталогу сервера.

Какие переменные мне нужно учитывать при создании этого скрипта?

3 ответа3

2

Если вы хотите автоматизировать его на сервере развертывания, у вас может быть файл, скажем «src.upload.complete.txt», который будет загружен в качестве последнего файла после загрузки вашего .war.

Установите crontab, проверяющий файл «src.upload.complete.txt» каждую минуту, и, найдя его, он перемещает файл .war в каталог развертывания. Затем он также удаляет файл «src.upload.complete.txt».

У меня не было времени, чтобы проверить это, но это может быть что-то вроде этого:

Чтобы настроить crontab для проверки каждую минуту, добавьте эту строку в /etc/crontab

* * * * * /path/to/bash/file.sh

Ваш file.sh должен выглядеть примерно так.

#!/bin/bash

FILE_PATH = '/path/to/your/file'
if [ -f $FILE_PATH ]; 
then    
         mv /path/to/src.war /path/to/deploy.war    
         rm /path/to/src.upload.complete.txt 
fi
0

Как насчет чего-то вроде:

scp my.war user@remote:/tmp && ssh user@remote 'mv /tmp/my.war /production/directory'
0

Если вы используете rsync вместо scp для обновления файла, он должен создать временный файл с другим именем, а затем при проверке целостности переместить его на правильное имя. Я думаю, что это более или менее необходимое вам поведение. Варианты по умолчанию должны сделать это. Просто замените scp на rsync, если вы не используете какие-либо конкретные опции (подробнее см. man rsync ). rsync sourcefile user@dest:/dest/directory/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .