#!/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" < "${TASKS_PATH}/${CFG_NAME}_Upgrade.conf" < "${TASKS_PATH}/${CFG_NAME}_Upgrade.conf" <