261 lines
8.8 KiB
Bash
Executable File
261 lines
8.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
. /etc/profile
|
|
|
|
# 脚本所在目录 绝对路径
|
|
ROOT_PATH=$(cd "$(dirname ${0})";pwd)
|
|
. ${ROOT_PATH}/env.conf
|
|
. ${ROOT_PATH}/inc.conf
|
|
. ${ROOT_PATH}/lib.conf
|
|
|
|
VERSION=$(cat ${ROOT_PATH}/.version)
|
|
|
|
getTask()
|
|
{
|
|
FILES=($(ls ${TASKS_PATH} | grep '.conf$'))
|
|
echo ${FILES[0]}
|
|
}
|
|
|
|
TASK()
|
|
{
|
|
TASK_FILE=$(getTask)
|
|
|
|
if [[ -z ${TASK_FILE} ]]; then
|
|
return
|
|
fi
|
|
|
|
logger "Detected task file [ ${TASK_FILE} ]"
|
|
|
|
TASK_FILE=${TASKS_PATH}/${TASK_FILE}
|
|
|
|
# import task config
|
|
logger "Load task configuration from [ ${TASK_FILE} ]"
|
|
. ${TASK_FILE}
|
|
|
|
# rm config
|
|
debugger "Delete TASK file [ ${TASK_FILE} ]"
|
|
rm -f ${TASK_FILE}
|
|
|
|
# download from url
|
|
if [[ -n ${CFG_URL} ]]; then
|
|
|
|
DOWNLOAD_PATH=${DOWNLOADS_PATH}/${CFG_NAME}/${CFG_VERSION}
|
|
|
|
# download if not been
|
|
if [[ ! -d ${DOWNLOAD_PATH} ]]; then
|
|
mkdir -p ${DOWNLOAD_PATH}
|
|
|
|
DOWNLOAD_FILE=${DOWNLOAD_PATH}/${CFG_NAME}.${CFG_FORMAT}
|
|
|
|
logger "Download from [ ${CFG_URL} => ${DOWNLOAD_FILE} ], version: ${CFG_VERSION}"
|
|
|
|
wget -t 3 -w 60 -T 30 -c -q --no-cookie --no-check-certificate ${CFG_URL} -O ${DOWNLOAD_FILE}
|
|
|
|
if [ $? -ne 0 ]; then
|
|
logger "Download failed "
|
|
rm -rf ${DOWNLOAD_PATH}
|
|
logger "Delete download temp dir [ ${DOWNLOAD_PATH} ]"
|
|
return
|
|
fi
|
|
if [[ ! -f ${DOWNLOAD_FILE} ]]; then
|
|
logger "Download File is not exist!"
|
|
rm -rf ${DOWNLOAD_PATH}
|
|
logger "Delete download temp dir [ ${DOWNLOAD_PATH} ]"
|
|
return
|
|
fi
|
|
|
|
# unpack
|
|
logger "Extract ..."
|
|
|
|
if [[ "zip" = ${CFG_FORMAT} ]]; then
|
|
if [[ -n ${CFG_UN} ]]; then
|
|
UNZIP_PASS=" -P ${CFG_UN}"
|
|
else
|
|
UNZIP_PASS=""
|
|
fi
|
|
|
|
unzip -o -qq${UNZIP_PASS} ${DOWNLOAD_FILE} -d ${DOWNLOAD_PATH}
|
|
|
|
logger "Delete download temp file [ ${DOWNLOAD_FILE} ]"
|
|
rm -f ${DOWNLOAD_FILE}
|
|
|
|
if [[ -n ${CFG_DIR} ]]; then
|
|
UNZIPPED_PATH=${DOWNLOAD_PATH}/${CFG_DIR}
|
|
if [[ -d ${UNZIPPED_PATH} ]]; then
|
|
\cp -r ${UNZIPPED_PATH}/* ${DOWNLOAD_PATH}
|
|
rm -rf ${UNZIPPED_PATH}
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
fi
|
|
|
|
if [[ -n ${CFG_OUTPUT_PATH} ]]; then
|
|
if [[ ! -d ${CFG_OUTPUT_PATH} ]]; then
|
|
mkdir -p ${CFG_OUTPUT_PATH}
|
|
fi
|
|
logger "Copy to output directory [ ${DOWNLOAD_PATH} => ${CFG_OUTPUT_PATH} ]"
|
|
\cp -r ${DOWNLOAD_PATH}/. ${CFG_OUTPUT_PATH}
|
|
else
|
|
CFG_OUTPUT_PATH=${DOWNLOAD_PATH}
|
|
fi
|
|
fi
|
|
|
|
# execute
|
|
if [[ -z ${CFG_EXECUTE} ]]; then
|
|
logger "Nothing to execute!"
|
|
return
|
|
fi
|
|
|
|
if [[ ${CFG_EXECUTE:0:1} = "/" ]]; then
|
|
EXECUTE_FILE=${CFG_EXECUTE}
|
|
else
|
|
if [[ -n ${CFG_OUTPUT_PATH} ]]; then
|
|
EXECUTE_FILE=${CFG_OUTPUT_PATH}/${CFG_EXECUTE}
|
|
fi
|
|
if [[ ! -f ${EXECUTE_FILE} ]]; then
|
|
logger "Execution script [ ${EXECUTE_FILE} ] not exists, find from common ..."
|
|
EXECUTE_FILE=${ROOT_PATH}/common/${CFG_NAME}/${CFG_EXECUTE}
|
|
fi
|
|
fi
|
|
|
|
if [[ ! -f ${EXECUTE_FILE} ]]; then
|
|
logger "Execution script [ ${EXECUTE_FILE} ] not exists! exit!"
|
|
return
|
|
fi
|
|
|
|
logger "Execution [ ${EXECUTE_FILE} ${CFG_ARGS} ]"
|
|
/bin/bash ${EXECUTE_FILE} ${CFG_ARGS} >> ${LOG_FILE}
|
|
logger "Execution completed!"
|
|
|
|
syncSoftwareStatus ${CFG_NAME} ${CFG_VERSION}
|
|
}
|
|
|
|
SOFT_CHECK()
|
|
{
|
|
debugger "[SOFT_CHECK]"
|
|
SOFT_STATUS=$(getSoftwareStatus)
|
|
CODE=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".code")
|
|
debugger "CODE :" ${CODE}
|
|
if [[ ${CODE} == 0 ]]; then
|
|
# 向日葵
|
|
SunloginClient=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SunloginClient")
|
|
if [[ -n ${SunloginClient} ]]; then
|
|
CFG_PATH=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SunloginClient.path" | sed 's/\"//g')
|
|
CFG_NAME=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SunloginClient.name" | sed 's/\"//g')
|
|
CFG_VERSION=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SunloginClient.version" | sed 's/\"//g')
|
|
CFG_EXECUTE=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SunloginClient.execute" | sed 's/\"//g')
|
|
version_file=${CFG_PATH}/.version
|
|
version="0.0.0"
|
|
if [[ -f ${version_file} ]]; then
|
|
version=$(cat ${version_file})
|
|
fi
|
|
|
|
if [[ $(version_compare ${version} ${CFG_VERSION}) = -1 ]]; then
|
|
logger "SOFT_CHECK: \"${CFG_NAME}\" detected new version:\"${CFG_VERSION}\" current:\"${version}\""
|
|
cat > "${TASKS_PATH}/${CFG_NAME}_Upgrade.conf" <<EOF
|
|
CFG_NAME="${CFG_NAME}"
|
|
CFG_VERSION="${CFG_VERSION}"
|
|
CFG_URL=""
|
|
CFG_FORMAT=""
|
|
CFG_DIR=""
|
|
CFG_UN=""
|
|
CFG_OUTPUT_PATH=""
|
|
CFG_EXECUTE="${CFG_EXECUTE}"
|
|
CFG_ARGS="\${CFG_VERSION}"
|
|
EOF
|
|
debugger "Task file created: \"${TASKS_PATH}/${CFG_NAME}_Upgrade.conf\""
|
|
fi
|
|
fi
|
|
|
|
#MiaozhenProbe
|
|
MiaozhenProbe=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe")
|
|
if [[ -n ${MiaozhenProbe} ]]; then
|
|
CFG_PATH=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe.path" | sed 's/\"//g')
|
|
CFG_NAME=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe.name" | sed 's/\"//g')
|
|
CFG_URL=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe.url" | sed 's/\"//g')
|
|
CFG_FORMAT=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe.format" | sed 's/\"//g')
|
|
CFG_VERSION=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe.version" | sed 's/\"//g')
|
|
CFG_EXECUTE=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.MiaozhenProbe.execute" | sed 's/\"//g')
|
|
version_file=${CFG_PATH}/.version
|
|
version="0.0.0"
|
|
if [[ -f ${version_file} ]]; then
|
|
version=$(cat ${version_file})
|
|
fi
|
|
|
|
if [[ $(version_compare ${version} ${CFG_VERSION}) = -1 ]]; then
|
|
logger "SOFT_CHECK: \"${CFG_NAME}\" detected new version:\"${CFG_VERSION}\" current:\"${version}\""
|
|
cat > "${TASKS_PATH}/${CFG_NAME}_Upgrade.conf" <<EOF
|
|
CFG_NAME="${CFG_NAME}"
|
|
CFG_VERSION="${CFG_VERSION}"
|
|
CFG_URL="${CFG_URL}"
|
|
CFG_FORMAT="${CFG_FORMAT}"
|
|
CFG_DIR=""
|
|
CFG_UN=""
|
|
CFG_OUTPUT_PATH="/home/Miaozhen/repo/last"
|
|
CFG_EXECUTE="${CFG_EXECUTE}"
|
|
CFG_ARGS="\${CFG_VERSION}"
|
|
EOF
|
|
debugger "Task file created: \"${TASKS_PATH}/${CFG_NAME}_Upgrade.conf\""
|
|
fi
|
|
fi
|
|
|
|
#SmartOrganizer
|
|
SmartOrganizer=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer")
|
|
if [[ -n ${SmartOrganizer} ]]; then
|
|
CFG_PATH=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer.path" | sed 's/\"//g')
|
|
CFG_NAME=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer.name" | sed 's/\"//g')
|
|
CFG_URL=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer.url" | sed 's/\"//g')
|
|
CFG_FORMAT=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer.format" | sed 's/\"//g')
|
|
CFG_VERSION=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer.version" | sed 's/\"//g')
|
|
CFG_EXECUTE=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".response.SmartOrganizer.execute" | sed 's/\"//g')
|
|
version_file=${CFG_PATH}/.version
|
|
version="0.0.0"
|
|
if [[ -f ${version_file} ]]; then
|
|
version=$(cat ${version_file})
|
|
fi
|
|
|
|
if [[ $(version_compare ${version} ${CFG_VERSION}) = -1 ]]; then
|
|
logger "SOFT_CHECK: \"${CFG_NAME}\" detected new version:\"${CFG_VERSION}\" current:\"${version}\""
|
|
cat > "${TASKS_PATH}/${CFG_NAME}_Upgrade.conf" <<EOF
|
|
CFG_NAME="${CFG_NAME}"
|
|
CFG_VERSION="${CFG_VERSION}"
|
|
CFG_URL="${CFG_URL}"
|
|
CFG_FORMAT="${CFG_FORMAT}"
|
|
CFG_DIR=""
|
|
CFG_UN=""
|
|
CFG_OUTPUT_PATH=""
|
|
CFG_EXECUTE="${CFG_EXECUTE}"
|
|
CFG_ARGS="${CFG_VERSION}"
|
|
EOF
|
|
debugger "Task file created: \"${TASKS_PATH}/${CFG_NAME}_Upgrade.conf\""
|
|
fi
|
|
fi
|
|
else
|
|
MSG=$(echo ${SOFT_STATUS} | ${ROOT_PATH}/bin/jq ".msg")
|
|
logger "SOFT_CHECK: ${MSG}"
|
|
fi
|
|
}
|
|
|
|
#TASK
|
|
#exit 2
|
|
|
|
logger "======== SO Daemon (${VERSION}) started! ========"
|
|
debugger "Use /etc/profile: ${PATH}"
|
|
|
|
TIMER_1800=0
|
|
|
|
while true; do
|
|
|
|
TASK
|
|
|
|
if [[ ${TIMER_1800} -ge 1800 ]] || [[ ${TIMER_1800} -eq 0 ]]; then
|
|
SOFT_CHECK
|
|
TIMER_1800=0
|
|
fi
|
|
|
|
sleep ${SOS_TIMER_STEP}
|
|
|
|
TIMER_1800=$[${TIMER_1800} + ${SOS_TIMER_STEP}]
|
|
|
|
done |