Files
tms-arch-linux-calamares-in…/archiso/airootfs/home/smart/SmartOrganizer/SODaemon
2025-11-23 15:33:54 +08:00

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