#!/bin/bash # Perform monitor for cann/air # Copyright (c) Huawei Technologies Co., Ltd. 2021. All right reserved current_path=$(dirname "$(readlink -f ${BASH_SOURCE[0]})") origin_path=$(pwd) DEPLOY_RES_PATH="" function get_deploy_res_path() { if [[ -n "$RESOURCE_CONFIG_PATH" ]]; then resource_file=${RESOURCE_CONFIG_PATH} if [[ -f ${resource_file} ]]; then deploy_res_path=$(grep -Po 'deploy_res_path[" :]+\K[^"]+' ${resource_file} | head -n 1) fi else if [[ -n "$HELPER_RES_FILE_PATH" ]]; then resource_file=${HELPER_RES_FILE_PATH}/resource.json else resource_file=${current_path}/../conf/resource.json fi if [[ -f ${resource_file} ]]; then deploy_res_path=$(grep -Po 'deployResPath[" :]+\K[^"]+' ${resource_file}) fi fi if [[ -z ${deploy_res_path} ]]; then deploy_res_path=${HOME}/ fi DEPLOY_RES_PATH=${deploy_res_path} } function get_client_connection() { get_deploy_res_path client_file=${DEPLOY_RES_PATH}/runtime/deploy_res/client.json if [[ -f "$client_file" ]]; then cat "$client_file" fi return 0 } DEPLOYER_DAEMON_SUB_PROCESS_LIST=() function get_deployer_daemon_sub_process() { DEPLOYER_DAEMON_SUB_PROCESS_LIST=() deployer_daemon_pid=$(pidof deployer_daemon) if [[ -z ${deployer_daemon_pid} ]]; then return; fi deployer_daemon_sub_pids=$(pgrep -P ${deployer_daemon_pid}) DEPLOYER_DAEMON_SUB_PROCESS_LIST=(${deployer_daemon_sub_pids// /}) } function check_proc_exist() { get_deployer_daemon_sub_process if [[ ${#DEPLOYER_DAEMON_SUB_PROCESS_LIST[*]} -gt 0 ]]; then proc_name=$(ps -p ${DEPLOYER_DAEMON_SUB_PROCESS_LIST[0]} -o comm=) echo "Process ${proc_name} exist." return 1 fi count=$(ps -ef|grep -w deployer_daemon | grep -v grep | wc -l) if [[ $count -gt 0 ]]; then echo "Process deployer_daemon exist." return 1 fi return 0 } function stop() { echo "Stopping process." ps -ef | grep deployer_daemon | grep -v grep | awk '{print $2}' | xargs -r kill ps -ef | grep sub_deployer | grep -v grep | awk '{print $2}' | xargs -r kill ps -ef | grep udf_executor | grep -v grep | awk '{print $2}' | xargs -r kill get_deploy_res_path deploy_res_path=${DEPLOY_RES_PATH}/runtime/deploy_res/ [ -d "$deploy_res_path" ] && rm -rf "$deploy_res_path"/* check_proc_exist if [[ "$?" -eq 0 ]]; then echo "Process stoped." return 0 fi result=1; cnt=0 while [[ $result -gt 0 && $cnt -lt 4 ]] do echo "Waiting for the process to end." sleep 10s check_proc_exist result=$? let cnt++ done if [[ $result -eq 0 ]]; then echo "Process stoped." return 0; fi echo "Retry stop process." get_deployer_daemon_sub_process for proc in "${DEPLOYER_DAEMON_SUB_PROCESS_LIST[@]}"; do kill -9 ${proc} done ps -ef | grep -w deployer_daemon | grep -v grep | awk '{print $2}' | xargs kill -9 sleep 10 check_proc_exist if [[ "$?" -eq 0 ]]; then echo "Process stoped." return 0 fi echo "Process stop failed." return 1 } function start() { check_proc_exist if [[ "$?" -gt 0 ]]; then echo "Process exist." return 1 fi get_deploy_res_path deploy_res_path="${DEPLOY_RES_PATH}/runtime/deploy_res/" if [ ! -x "${DEPLOY_RES_PATH}" ]; then echo "Does not have execute permission on dir ${DEPLOY_RES_PATH}." return 1; fi if [ ! -d "$deploy_res_path" ]; then if [ ! -d "${DEPLOY_RES_PATH}/runtime" ]; then mkdir "${DEPLOY_RES_PATH}/runtime" chmod 700 "${DEPLOY_RES_PATH}/runtime" fi mkdir "$deploy_res_path" fi chmod 700 "$deploy_res_path" $current_path/deployer_daemon return 0 } function status() { proc_deployer_daemon_number=$(ps -ef | grep -w deployer_daemon | grep -v grep | wc -l) if [[ $proc_deployer_daemon_number -le 0 ]] then echo "Process deployer_daemon does not exist." cd $origin_path return 1 fi proc_deployer_daemon_status=$(ps -efl | grep deployer_daemon | grep -v grep | awk '{print $2}') if [[ "$proc_deployer_daemon_status" == "Z" ]] || [[ "$proc_deployer_daemon_status" == "D" ]] || [[ "$proc_deployer_daemon_status" == "T" ]] then echo "Process deployer_daemon is in abnormal state $proc_deployer_daemon_status." cd $origin_path return 1 fi get_client_connection deployer_daemon_pid=$(pidof deployer_daemon) ip_port=$(netstat -nlp | grep ${deployer_daemon_pid} | awk '{print $4}') timeout 10s curl ${ip_port} > /dev/null 2>&1 curl_ret=$? RET_TIMEOUT=124 if [[ "${curl_ret}" == "${RET_TIMEOUT}" ]]; then echo "${ip_port} no response." return 1 fi } cd $current_path if [[ -n "$2" ]] then export RESOURCE_CONFIG_PATH="$2" fi if [[ "$1" == "status" ]] then status if [[ "$?" -eq 0 ]]; then exit 0 fi exit 1 elif [[ "$1" == "start" ]] then start if [[ "$?" -eq 0 ]]; then exit 0 fi exit 1 elif [[ "$1" == "stop" ]] then stop if [[ "$?" -eq 0 ]]; then exit 0 fi exit 1 else echo "invalid input command." fi cd $origin_path