diff --git a/scripts/check-all-by-signal.sh b/scripts/check-all-by-signal.sh index efd860a5e..80584d088 100644 --- a/scripts/check-all-by-signal.sh +++ b/scripts/check-all-by-signal.sh @@ -40,35 +40,6 @@ handle_error() { trap handle_error ERR -# Assuming OPENIM_SERVER_NAME_TARGETS and OPENIM_SERVER_PORT_TARGETS are defined -# Similarly for OPENIM_DEPENDENCY_TARGETS and OPENIM_DEPENDENCY_PORT_TARGETS - -# Print out services and their ports - -# OpenIM check -echo "++ The port being checked: ${OPENIM_SERVER_PORT_LISTARIES[@]}" -openim::log::info "\n## Check all dependent service ports" -echo "++ The port being checked: ${OPENIM_DEPENDENCY_PORT_LISTARIES[@]}" - -set +e - -# Later, after discarding Docker, the Docker keyword is unreliable, and Kubepods is used -if grep -qE 'docker|kubepods' /proc/1/cgroup || [ -f /.dockerenv ]; then - openim::color::echo ${COLOR_CYAN} "Environment in the interior of the container" -else - openim::color::echo ${COLOR_CYAN} "The environment is outside the container" - openim::util::check_ports ${OPENIM_DEPENDENCY_PORT_LISTARIES[@]} || return 0 -fi - - - -if [[ $? -ne 0 ]]; then - openim::log::error_exit "The service does not start properly, please check the port, query variable definition!" - echo "+++ https://github.com/openimsdk/open-im-server/tree/main/scripts/install/environment.sh +++" -else - echo "++++ Check all dependent service ports successfully !" -fi - openim::log::info "\n## Check OpenIM service name" . $(dirname ${BASH_SOURCE})/install/openim-msgtransfer.sh openim::msgtransfer::check_by_signal diff --git a/scripts/lib/util.sh b/scripts/lib/util.sh index cf792ab26..7f1c9e6ac 100755 --- a/scripts/lib/util.sh +++ b/scripts/lib/util.sh @@ -372,60 +372,86 @@ openim::util::check_ports() { openim::util::check_ports_by_signal() { - # An array to collect information about processes that are still running. - local running=() + # An array to collect ports of processes that are not running. + local not_started=() - # An array to collect information about processes that have been stopped. - local stopped=() + # An array to collect information about processes that are running. + local started=() - openim::log::info "Checking processes for: $*" - # Iterate over each given process name. - for name in "$@"; do - # Check the OS and use the appropriate command to find processes by name + openim::log::info "Checking ports: $*" + # Iterate over each given port. + for port in "$@"; do + # Initialize variables + # Check the OS and use the appropriate command if [[ "$OSTYPE" == "linux-gnu"* ]]; then - info=$(pgrep -fl "$name" || true) - elif [[ "$OSTYPE" == "darwin"* ]]; then - # For macOS, use pgrep as well, lsof for ports is not relevant here - info=$(pgrep -fl "$name" || true) + if command -v ss > /dev/null 2>&1; then + info=$(ss -ltnp | grep ":$port" || true) + else + info=$(netstat -ltnp | grep ":$port" || true) + fi + elif [[ "$OSTYPE" == "darwin"* ]]; then + # For macOS, use lsof + info=$(lsof -P -i:"$port" | grep "LISTEN" || true) fi - # Check if the process is still running + # Check if any process is using the port if [[ -z $info ]]; then - stopped+=("$name") + not_started+=($port) else - running+=("Running process for $name: $info") + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + # Extract relevant details for Linux: Process Name, PID, and FD. + details=$(echo $info | sed -n 's/.*users:(("\([^"]*\)",pid=\([^,]*\),fd=\([^)]*\))).*/\1 \2 \3/p') + command=$(echo $details | awk '{print $1}') + pid=$(echo $details | awk '{print $2}') + fd=$(echo $details | awk '{print $3}') + elif [[ "$OSTYPE" == "darwin"* ]]; then + # Handle extraction for macOS + pid=$(echo $info | awk '{print $2}' | cut -d'/' -f1) + command=$(ps -p $pid -o comm= | xargs basename) + fd=$(echo $info | awk '{print $4}' | cut -d'/' -f1) + fi + + # Get the start time of the process using the PID + if [[ -z $pid ]]; then + start_time="N/A" + else + start_time=$(ps -p $pid -o lstart=) + fi + + started+=("Port $port - Command: $command, PID: $pid, FD: $fd, Started: $start_time") fi done - # Print information about processes that are still running. - if [[ ${#running[@]} -ne 0 ]]; then - openim::log::info "\n### Running processes:" - for info in "${running[@]}"; do - openim::log::info "$info" - done - else - # If all processes have been stopped, print a success message. - openim::log::success "All specified processes have been stopped." - fi +# # Print information about ports whose processes are not running. +# if [[ ${#not_started[@]} -ne 0 ]]; then +# openim::log::info "\n### Not started ports:" +# for port in "${not_started[@]}"; do +# openim::log::error "Port $port is not started." +# done +# fi - # Print information about processes that have been stopped, if any. - if [[ ${#stopped[@]} -ne 0 ]]; then - openim::log::info "\n### Stopped processes:" - for name in "${stopped[@]}"; do - openim::log::info "Process $name has been stopped." + # Print information about ports whose processes are running. + if [[ ${#started[@]} -ne 0 ]]; then + openim::log::info "\n### No stop ports:" + for info in "${started[@]}"; do + openim::log::info "$info" done fi - # If any of the processes is still running, return a status of 1. - if [[ ${#running[@]} -ne 0 ]]; then + # If any of the processes is not running, return a status of 1. + if [[ ${#not_started[@]} -ne 0 ]]; then + openim::color::echo $COLOR_RED " OpenIM Stdout Log >> cat ${LOG_FILE}" + openim::color::echo $COLOR_RED " OpenIM Stderr Log >> cat ${STDERR_LOG_FILE}" + cat "$TMP_LOG_FILE" | awk '{print "\033[31m" $0 "\033[0m"}' return 1 else +# openim::log::success "All specified processes are running." + openim::log::success "Have processes no stop." return 0 fi } - # set +o errexit # Sample call for testing: # openim::util::check_ports 10002 1004 12345 13306