diff --git a/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java b/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java index 72b6759..d36d3b9 100644 --- a/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java +++ b/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java @@ -6,6 +6,7 @@ import io.wdd.agent.executor.thread.LogToArrayListCache; import io.wdd.common.beans.executor.ExecutionMessage; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; @@ -86,12 +87,17 @@ public class CommandExecutor { // start to send the result log streamSender.startToWaitLog(streamKey); - // get the command result - processResult = process.waitFor(); + // get the command result must also be a timeout smaller than the process + boolean waitFor = process.waitFor(processMaxWaitSeconds, TimeUnit.SECONDS); // end send logs streamSender.endWaitLog(streamKey); + // get the process result + if (ObjectUtils.isNotEmpty(waitFor) && ObjectUtils.isNotEmpty(process)) { + processResult = process.exitValue(); + } + log.debug("current shell command {} result is {}", processBuilder.command(), processResult); @@ -106,7 +112,6 @@ public class CommandExecutor { return () -> { try { - log.debug("daemon thread start to wait for {} s for the result", processMaxWaitSeconds); TimeUnit.SECONDS.sleep(processMaxWaitSeconds); diff --git a/agent/src/main/java/io/wdd/agent/executor/function/CollectAllExecutorFunction.java b/agent/src/main/java/io/wdd/agent/executor/function/CollectAllExecutorFunction.java index c833623..e8c2998 100644 --- a/agent/src/main/java/io/wdd/agent/executor/function/CollectAllExecutorFunction.java +++ b/agent/src/main/java/io/wdd/agent/executor/function/CollectAllExecutorFunction.java @@ -31,7 +31,7 @@ public class CollectAllExecutorFunction { /** - * store the Octopus Agent Functions and Reflection Class Path + * store the Octopus Agent Functions and Function Command List * key: function name * value: function shell List contend */ diff --git a/source/src/main/java/io/wdd/source/shell/agent-bootup.sh b/source/src/main/java/io/wdd/source/shell/agent-bootup.sh index 4854a18..f4bc099 100644 --- a/source/src/main/java/io/wdd/source/shell/agent-bootup.sh +++ b/source/src/main/java/io/wdd/source/shell/agent-bootup.sh @@ -2,7 +2,6 @@ ##### environment variables ###### - JAVA_OPTS="-Xms128m -Xmx512m -Dfile.encoding=utf-8 --spring.profiles.active=k3s --spring.cloud.nacos.config.group=k3s --spring.cloud.nacos.config.extension-configs[0].dataId=common-k3s.yaml --spring.cloud.nacos.config.extension-configs[0].group=k3s" DependLibFiles=( @@ -41,6 +40,15 @@ colorEcho() { echo -e "\033[${1}${@:2}\033[0m" 1>&2 } +####################################### +# description +# Globals: +# EUID +# RED +# YELLOW +# Arguments: +# None +####################################### check_root() { if [[ $EUID != 0 ]]; then colorEcho ${RED} "当前非root账号(或没有root权限),无法继续操作,请更换root账号!" @@ -49,17 +57,41 @@ check_root() { fi } +####################################### +# description +# Globals: +# PURPLE +# SplitLine +# Arguments: +# None +####################################### FunctionStart() { colorEcho ${PURPLE} ${SplitLine} colorEcho ${PURPLE} ${SplitLine} echo "" } +####################################### +# description +# Globals: +# GREEN +# SplitLine +# Arguments: +# None +####################################### FunctionSuccess() { colorEcho ${GREEN} ${SplitLine} echo "" } +####################################### +# description +# Globals: +# BlinkGreen +# SplitLine +# Arguments: +# None +####################################### FunctionEnd() { echo "" colorEcho ${BlinkGreen} ${SplitLine} @@ -79,32 +111,32 @@ check_sys() { sys_bit=$(uname -m) case $sys_bit in - i[36]86) - os_bit="32" - LinuxRelease="386" - ;; - x86_64) - os_bit="64" - LinuxRelease="amd64" - ;; - *armv6*) - os_bit="arm" - LinuxRelease="arm6" - ;; - *armv7*) - os_bit="arm" - LinuxRelease="arm7" - ;; - *aarch64* | *armv8*) - os_bit="arm64" - LinuxRelease="arm64" - ;; - *) - colorEcho ${RED} " + i[36]86) + os_bit="32" + LinuxRelease="386" + ;; + x86_64) + os_bit="64" + LinuxRelease="amd64" + ;; + *armv6*) + os_bit="arm" + LinuxRelease="arm6" + ;; + *armv7*) + os_bit="arm" + LinuxRelease="arm7" + ;; + *aarch64* | *armv8*) + os_bit="arm64" + LinuxRelease="arm64" + ;; + *) + colorEcho ${RED} " 哈哈……这个 辣鸡脚本 不支持你的系统。 (-_-) \n 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统 " && exit 1 - ;; + ;; esac ## 判定Linux的发行版本 if [ -f /etc/redhat-release ]; then @@ -187,6 +219,18 @@ installDemandSoftwares() { return 0 } +####################################### +# description +# Globals: +# BLUE +# DependLibFiles +# OctopusAgentPath +# RED +# RepoSourcePath +# libfile +# Arguments: +# None +####################################### DownloadAllFile() { FunctionStart @@ -202,7 +246,7 @@ DownloadAllFile() { for libfile in ${DependLibFiles[*]}; do colorEcho $BLUE "lib file is $libfile" - wget "$RepoSourcePath/lib/$libfile" -Oq $OctopusAgentPath/lib/$libfile + wget "$RepoSourcePath/lib/$libfile" -qO $OctopusAgentPath/lib/$libfile FunctionSuccess done @@ -220,8 +264,15 @@ DownloadAllFile() { } - -ModifySystemConfig(){ +####################################### +# description +# Globals: +# BLUE +# GREEN +# Arguments: +# None +####################################### +ModifySystemConfig() { FunctionStart colorEcho ${BLUE} "开始修改系统内核参数…………" @@ -236,13 +287,20 @@ EOF colorEcho ${GREEN} "--------------系统内核参数修改的结果如上所示----------------" FunctionSuccess - - } +####################################### +# description +# Globals: +# BLUE +# JDK_VERSION +# LinuxReleaseVersion +# Arguments: +# 1 +####################################### InstallJDKPackage() { JDK_VERSION="11" - if [[ "$1" -ne " " ]]; then + if [[ $1 -ne " " ]]; then JDK_VERSION="$1" echo "JDK Version = ${JDK_VERSION}" fi @@ -250,7 +308,7 @@ InstallJDKPackage() { echo "InstallJDK from package management !" echo "" - if [[ "${LinuxReleaseVersion}" == "centos" ]]; then + if [[ ${LinuxReleaseVersion} == "centos" ]]; then colorEcho ${BLUE} "当前系统发行版为 centos !" colorEcho ${BLUE} "可以安装的 openjdk 版本为:" yum list java-${JDK_VERSION}-openjdk | grep ${JDK_VERSION} @@ -273,7 +331,14 @@ InstallJDKPackage() { } -systemdAgent(){ +####################################### +# description +# Globals: +# JAVA_OPTS +# Arguments: +# None +####################################### +systemdAgent() { # https://www.baeldung.com/linux/run-java-application-as-service @@ -297,15 +362,15 @@ ExecStop=/bin/kill -15 \$MAINPID WantedBy=multi-user.target EOF -# https://www.benzhu.xyz/linux12/ -cat >/etc/rsyslog.d/octopus-agent.conf </etc/rsyslog.d/octopus-agent.conf <&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' } +####################################### +# description +# Arguments: +# 1 +# Returns: +# ... +####################################### calc_size() { local raw=$1 local total_size=0 @@ -72,12 +81,35 @@ calc_size() { echo "${total_size} ${unit}" } +####################################### +# description +# Arguments: +# None +# Returns: +# ... +####################################### GethostArchInfo() { [ -f /etc/redhat-release ] && awk '{print $0}' /etc/redhat-release && return [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return } +####################################### +# description +# Globals: +# freespace +# io1 +# io2 +# io3 +# ioall +# ioavg +# ioraw1 +# ioraw2 +# ioraw3 +# writemb +# Arguments: +# None +####################################### StartIOTest() { log "start IO speed test !" freespace=$(df -m . | awk 'NR==2 {print $4}') @@ -105,12 +137,22 @@ StartIOTest() { echo " $(_red "Not enough space for I/O Speed test!")" fi - } +####################################### +# description +# Globals: +# cpuName +# sys_manu +# sys_product +# sys_ver +# virt +# virtualx +# Arguments: +# None +####################################### Check_Virtualization() { - log "start to check host virtualization !" command_exists "dmesg" && virtualx="$(dmesg 2>/dev/null)" @@ -131,21 +173,21 @@ Check_Virtualization() { virt="LXC" elif [[ -f /proc/user_beancounters ]]; then virt="OpenVZ" - elif [[ "${virtualx}" == *kvm-clock* ]]; then + elif [[ ${virtualx} == *kvm-clock* ]]; then virt="KVM" - elif [[ "${sys_product}" == *KVM* ]]; then + elif [[ ${sys_product} == *KVM* ]]; then virt="KVM" - elif [[ "${cpuName}" == *KVM* ]]; then + elif [[ ${cpuName} == *KVM* ]]; then virt="KVM" - elif [[ "${cpuName}" == *QEMU* ]]; then + elif [[ ${cpuName} == *QEMU* ]]; then virt="KVM" - elif [[ "${virtualx}" == *"VMware Virtual Platform"* ]]; then + elif [[ ${virtualx} == *"VMware Virtual Platform"* ]]; then virt="VMware" - elif [[ "${sys_product}" == *"VMware Virtual Platform"* ]]; then + elif [[ ${sys_product} == *"VMware Virtual Platform"* ]]; then virt="VMware" - elif [[ "${virtualx}" == *"Parallels Software International"* ]]; then + elif [[ ${virtualx} == *"Parallels Software International"* ]]; then virt="Parallels" - elif [[ "${virtualx}" == *VirtualBox* ]]; then + elif [[ ${virtualx} == *VirtualBox* ]]; then virt="VirtualBox" elif [[ -e /proc/xen ]]; then if grep -q "control_d" "/proc/xen/capabilities" 2>/dev/null; then @@ -155,9 +197,9 @@ Check_Virtualization() { fi elif [ -f "/sys/hypervisor/type" ] && grep -q "xen" "/sys/hypervisor/type"; then virt="Xen" - elif [[ "${sys_manu}" == *"Microsoft Corporation"* ]]; then - if [[ "${sys_product}" == *"Virtual Machine"* ]]; then - if [[ "${sys_ver}" == *"7.0"* || "${sys_ver}" == *"Hyper-V" ]]; then + elif [[ ${sys_manu} == *"Microsoft Corporation"* ]]; then + if [[ ${sys_product} == *"Virtual Machine"* ]]; then + if [[ ${sys_ver} == *"7.0"* || ${sys_ver} == *"Hyper-V" ]]; then virt="Hyper-V" else virt="Microsoft Virtual Machine" @@ -167,12 +209,21 @@ Check_Virtualization() { virt="Dedicated" fi - } +####################################### +# description +# Globals: +# city +# country +# org +# public_ipv4 +# region +# Arguments: +# None +####################################### GetIpv4Info() { - log "start to get system public ip info !" org="$(wget -q -T10 -O- ipinfo.io/org)" @@ -181,10 +232,8 @@ GetIpv4Info() { region="$(wget -q -T10 -O- ipinfo.io/region)" public_ipv4="$(wget -q -T10 -O- ipinfo.io/ip)" - } - log "start to collect system info !" check_sys @@ -247,7 +296,6 @@ disk_used_size=$( disk_used_size=$(calc_size $disk_used_size) tcpctrl=$(sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}') - # todo # StartIOTest @@ -262,7 +310,7 @@ if [[ $(cat /etc/hostname | cut -d"-" -f 3 | grep -c '^[0-9][0-9]') -gt 0 ]]; th else machineNumber=99 fi -cat >/etc/environment.d/octopus-agent.conf</etc/environment.d/octopus-agent.conf <" -f2 | cut -d"<" -f1) + local latestVersion=$(curl $OctopusAgentUrl | grep -v h1 | grep "a href=" | awk '{print$2}' | cut -d">" -f2 | cut -d"<" -f1) + log "" log "octopus agent latest version is => [ $latestVersion ]" - echo "" + log "" rm -rf /octopus-agent/*.jar cd /octopus-agent log "start to download the latest version !" wget "$OctopusAgentUrl$latestVersion" cp "$latestVersion" agent.jar - echo "" - echo "" - log "----------------------------------------------" + log "" + log "" + log "---------------- ls the /octopus-agent ----------------------" ls /octopus-agent/ | grep jar log "----------------------------------------------" -} \ No newline at end of file +}