Я разработчик, который иногда работает над вопросами, связанными с развертыванием. Я использую 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
Я сделал изменения к Вашему сценарию для создания некоторых файлов журнала. И, некоторая обработка ошибок, таким образом, Вы просто выходите на одном из шагов выполнения, если это перестало работать. И некоторый незначительный материал стиля, так как я являюсь крайне злым с необходимостью в определенных добавленных вещах стиля.
Примечание, что я делаю 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
ls ~/Desktop~
? – Ravexina 16 August 2017 в 16:57