#!/bin/bash LOG_FILE="${TRIM_PKGVAR}/info.log" PID_FILE="${TRIM_PKGVAR}/app.pid" # write the command to start your program here CMD="${TRIM_APPDEST}/bin/CrashCore -d ${TRIM_APPDEST}/config/" log_msg() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> ${LOG_FILE} } start_process() { if status; then return 0 fi log_msg "Starting process ..." # run cmd to start process bash -c "${CMD}" >> ${LOG_FILE} 2>&1 & # write pid to pidfile printf "%s" "$!" > ${PID_FILE} # log_msg "CMD = ${CMD}" # log_msg "pid = $!" return 0 } stop_process() { log_msg "Stopping process ..." if [ -r "${PID_FILE}" ]; then pid=$(head -n 1 "${PID_FILE}" | tr -d '[:space:]') log_msg "pid=${pid}" if ! check_process "${pid}"; then # process not exist, delete pidfile rm -f "${PID_FILE}" log_msg "remove pid file 1" return fi log_msg "send TERM signal to PID:${pid}..." kill -TERM ${pid} >> ${LOG_FILE} 2>&1 local count=0 while check_process "${pid}" && [ $count -lt 10 ]; do sleep 1 count=$((count + 1)) log_msg "waiting process terminal... (${count}s/10s)" done if check_process "${pid}"; then log_msg "send KILL signal to PID:${pid}..." kill -KILL "${pid}" sleep 1 rm -f "${PID_FILE}" else log_msg "process killed... " fi fi return 0 } check_process() { local pid=$1 if kill -0 "${pid}" 2>/dev/null; then return 0 # process exist else return 1 # process not exist fi } status() { if [ -f "${PID_FILE}" ]; then pid=$(head -n 1 "${PID_FILE}" | tr -d '[:space:]') if check_process "${pid}"; then return 0 else # Process is not running but pidfile exists - clean it up rm -f "${PID_FILE}" fi fi return 1 } case $1 in start) # run start command. exit 0 if success, exit 1 if failed start_process ;; stop) # run stop command. exit 0 if success, exit 1 if failed stop_process ;; status) # check application status command. exit 0 if running, exit 3 if not running if status; then exit 0 else exit 3 fi ;; *) exit 1 ;; esac