Внезапная очистка нестандартного пакета .deb через скрипт

Я разработчик, который иногда работает над вопросами, связанными с развертыванием. Я использую Jenkins для автоматического развертывания моего приложения на машине ubuntu 14.04. Мое приложение упаковано как .deb, а некоторые вспомогательные приложения - как jar. Я написал небольшой скрипт для установки Debian / JAR. Я пытаюсь очистить существующее приложение и установить новое. Но иногда сценарий закрывается во время очистки, а остальные шаги не выполняются. Это создает некоторые проблемы для меня, так как много раз мне приходится заходить на сервер, переустанавливать и перезапускать свое приложение. Я не получаю никаких ошибок в консоли при ее выполнении, поэтому не могу предоставить больше информации.

Вставив мой сценарий здесь, кто-нибудь может указать, что является возможной проблемой в моем сценарии.

mod=$1
defaultType="true"
isJar=${2:-$defaultType}
echo "before killing process mod: $1"
sudo pkill -f "${mod}-api"
echo "module ${mod}"
echo "after process kill"
cd /home/administrator/apps/

if [ ${isJar} = "false" ]
then
#       echo "Purging debian package"
#       sudo dpkg --purge ${mod}-api
        echo "Installing debian package"        
        sudo dpkg --install ${mod}-api*.deb
        sudo service ${mod}mod start
else
        jarfile=${mod}-api*.jar
        echo "$jarfile"
        nohup java -Dlogback.configurationFile="$mod-logback.xml" -jar ${jarfile} &>/dev/null &
fi
exit

Я попробовал решение, предоставленное Томасом, но получил следующую ошибку:

dpkg: error: dpkg status database is locked by another process
Starting Common Module: Commonstart-stop-daemon: unable to stat /usr/bin/common-api (No such file or directory)
.
Selecting previously unselected package common-api.
(Reading database ... 177687 files and directories currently installed.)
Preparing to unpack common-api_0.8.9.55-DEV-SNAPSHOT_all.deb ...
Unpacking common-api (0.8.9.55-DEV-SNAPSHOT) ...
dpkg: error processing archive 2 (--install):
 cannot access archive: No such file or directory
Setting up common-api (0.8.9.55-DEV-SNAPSHOT) ...
Creating system group: common-api
Creating system user: common-api in common-api with common-api daemon-user and shell /bin/false
Errors were encountered while processing:
 2
-1
задан 7 April 2016 в 13:45

1 ответ

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

Примечание, что я делаю dir в /tmp/ названным custominstall-logs для содержания журналов здесь. Можно сделать это везде, где Вы хотите, но я предложил бы оставить его в /tmp/ (так, чтобы, если никаких ошибок не происходит, у Вас были журналы ошибок).

я немного требователен в отношении стиля и других вещей, таким образом, я изменил немного Вашего сценария и добавил комментарии. (Я не добавил проверки на ошибки на то, где Ваш прокомментированный 'чистка пакет' материал)

#!/bin/bash
mod=$1
defaultType="true"
isJar=${2:-$defaultType}
echo "before killing process mod: $1"
sudo pkill -f "${mod}-api"
echo "module ${mod}"
echo "after process kill"
cd /home/administrator/apps/

# Using an error checking folder in /tmp/... make it.
mkdir /tmp/custominstall-logs/

if [ ${isJar} = "false" ]
then
#       echo "Purging debian package"
#       sudo dpkg --purge ${mod}-api 2&>1 > /tmp/custominstall-logs/apt-log-purge
#       if [ $? -ne 0 ]; then
#           echo "Error removing package; please refer to the log file "
#           echo "in /tmp/custominstall-logs/apt-log-purge for details."
#           exit 1   # Exit with an error code, instead of 0
#       fi 
        echo "Installing debian package"        
        sudo dpkg --install ${mod}-api*.deb 2&>1 > /tmp/custominstall-logs/apt-log-install
        if [ $? -ne 0 ]; then
            echo "Error installing package; please refer to the log file "
            echo "in /tmp/custominstall-logs/apt-log-install for details."
            exit 2   # Exit with an error code, instead of 0
        fi 
        sudo service ${mod}mod start 2&>1 > /tmp/custominstall-logs/service-start-log
        if [ $? -ne 0 ]; then
            echo "Error starting the service; please refer to the log file "
            echo "in /tmp/custominstall-logs/service-start-log for details."
            exit 3   # Exit with an error code, instead of 0
        fi 
else
        jarfile=${mod}-api*.jar
        echo "$jarfile"
        nohup java -Dlogback.configurationFile="$mod-logback.xml" -jar \
            ${jarfile} &>/dev/null &
fi

# If we didn't exit earlier with an error code, then we exit with
# Code 0 for "Success".
exit 0  
0
ответ дан 7 April 2016 в 23:45

Другие вопросы по тегам:

Похожие вопросы: