diff --git a/scripts/install/openim-crontask.sh b/scripts/install/openim-crontask.sh new file mode 100755 index 000000000..0ea78c289 --- /dev/null +++ b/scripts/install/openim-crontask.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash + +# Copyright © 2023 OpenIM. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set +o nounset +set -o pipefail + +OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P) +[[ -z ${COMMON_SOURCED} ]] && source ${OPENIM_ROOT}/scripts/install/common.sh + +SERVER_NAME="openim-crontask" + +openim::log::status "Start OpenIM Cron, binary root: ${SERVER_NAME}" +openim::log::info "Start OpenIM Cron, path: ${OPENIM_CRONTASK_BINARY}" + +openim::util::stop_services_with_name ${SERVER_NAME} + +openim::log::status "start cron_task process, path: ${OPENIM_CRONTASK_BINARY}" +nohup ${OPENIM_CRONTASK_BINARY} >>${LOG_FILE} 2>&1 & +openim::util::check_process_names ${SERVER_NAME} + +###################################### Linux Systemd ###################################### +SYSTEM_FILE_PATH="/etc/systemd/system/${SERVER_NAME}.service" + +# Print the necessary information after installation +function openim::crontask::info() { +cat << EOF +openim-crontask listen on: ${OPENIM_CRONTASK_HOST} +EOF +} + +# install openim-crontask +function openim::crontask::install() +{ + pushd ${OPENIM_ROOT} + + # 1. Build openim-crontask + make build BINS=${SERVER_NAME} + openim::common::sudo "cp ${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME} ${OPENIM_INSTALL_DIR}/bin" + + openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/bin/${SERVER_NAME}" + + # 2. Generate and install the openim-crontask configuration file (openim-crontask.yaml) + echo ${LINUX_PASSWORD} | sudo -S bash -c \ + "./scripts/genconfig.sh ${ENV_FILE} deployments/templates/${SERVER_NAME}.yaml > ${OPENIM_CONFIG_DIR}/${SERVER_NAME}.yaml" + openim::log::status "${SERVER_NAME} config file: ${OPENIM_CONFIG_DIR}/${SERVER_NAME}.yaml" + + # 3. Create and install the ${SERVER_NAME} systemd unit file + echo ${LINUX_PASSWORD} | sudo -S bash -c \ + "./scripts/genconfig.sh ${ENV_FILE} deployments/templates/init/${SERVER_NAME}.service > ${SYSTEM_FILE_PATH}" + openim::log::status "${SERVER_NAME} systemd file: ${SYSTEM_FILE_PATH}" + + # 4. Start the openim-crontask service + openim::common::sudo "systemctl daemon-reload" + openim::common::sudo "systemctl restart ${SERVER_NAME}" + openim::common::sudo "systemctl enable ${SERVER_NAME}" + openim::crontask::status || return 1 + openim::crontask::info + + openim::log::info "install ${SERVER_NAME} successfully" + popd +} + + +# Unload +function openim::crontask::uninstall() +{ + set +o errexit + openim::common::sudo "systemctl stop ${SERVER_NAME}" + openim::common::sudo "systemctl disable ${SERVER_NAME}" + openim::common::sudo "rm -f ${OPENIM_INSTALL_DIR}/bin/${SERVER_NAME}" + openim::common::sudo "rm -f ${OPENIM_CONFIG_DIR}/${SERVER_NAME}.yaml" + openim::common::sudo "rm -f /etc/systemd/system/${SERVER_NAME}.service" + set -o errexit + openim::log::info "uninstall ${SERVER_NAME} successfully" +} + +# Status Check +function openim::crontask::status() +{ + # Check the running status of the ${SERVER_NAME}. If active (running) is displayed, the ${SERVER_NAME} is started successfully. + systemctl status ${SERVER_NAME}|grep -q 'active' || { + openim::log::error "${SERVER_NAME} failed to start, maybe not installed properly" + return 1 + } + + # The listening port is hardcode in the configuration file + if echo | telnet 127.0.0.1 7070 2>&1|grep refused &>/dev/null;then + openim::log::error "cannot access health check port, ${SERVER_NAME} maybe not startup" + return 1 + fi +} + +if [[ "$*" =~ ${SERVER_NAME}:: ]];then + eval $* +fi