commit 768f5782c2a7247fab31addcf7585248add5b61d Author: admin.ble Date: Mon Jul 29 13:12:32 2024 +0000 no_idle.sh Bash script to black idle state for Oracle Cloud Free-tier VPS diff --git a/no_idle.sh b/no_idle.sh new file mode 100644 index 0000000..8a20a26 --- /dev/null +++ b/no_idle.sh @@ -0,0 +1,173 @@ +#!/bin/bash +# Author: Baptiste Leforestier +# Date: 2024-06-28 + +. /etc/profile + +function log(){ + echo "[$(date +'%Y-%m-%d %H:%M:%S')] - $1" +} + +function get_latest_info(){ + local latest_info_file='/tmp/NeverIdle-latest-info.json' + wget -q -O ${latest_info_file} https://api.github.com/repos/layou233/NeverIdle/releases/latest + [[ $? -ne 0 ]] && log "Failed to get latest info" && exit 1 + latest_version=$(grep tag_name ${latest_info_file} | cut -d '"' -f 4| sed 's/^v//g') + latest_comments=$(grep body ${latest_info_file} | cut -d '"' -f 4) + rm -f ${latest_info_file} +} + +function auto_set_mem_test_size(){ + mem_test='-m 2' + if [[ $mem_total -lt 4 ]] + then + log "AMD doesn't need to test memory !" + mem_test='' + elif [[ $mem_total -lt 13 ]] + then + log "Memory test size: [1G]" + mem_test='-m 1' + else + log "Memory test size: [2G]" + fi +} + +function download_and_run() { + local base_download_url="https://github.com/layou233/NeverIdle/releases/download" + local filename="NeverIdle-${platform}" + local download_dir="/tmp" + local download_url="${base_download_url}/${latest_version}/${filename}" + + mkdir -p $download_dir + rm -f ${download_dir}/NeverIdle + + log "Downloading ${filename} to ${download_dir}/NeverIdle ..." + wget -q -O ${download_dir}/NeverIdle ${download_url} + [[ $? -ne 0 ]] && log "Download ${filename} failed" && exit 1 + + chmod +x ${download_dir}/NeverIdle + + if [[ ${memory_test_size} -gt $mem_total ]] || [[ "x${memory_test_size}" == "x" ]] + then + log "invalid memory size: [${memory_test_size}]" + auto_set_mem_test_size + elif [[ "x${memory_test_size}" == "x0" ]] + then + mem_test='' + log "Memory test disabled." + else + mem_test="-m ${memory_test_size}" + log "Memory test size: [${memory_test_size}]" + fi + + local cpu_test="-c 2h" + if [[ "x${cpu_test_interval}" == "x" ]] + then + local cpu_test="-c 2h" + log "cpu test interval is empty, set to default value: [2h]" + elif [[ "x${cpu_test_interval}" == "x0" ]] + then + local cpu_test="-c 2h" + log "cpu test can't disable, set to default value: [2h]." + else + local cpu_test="-c ${cpu_test_interval}h" + log "cpu test interval: [${cpu_test_interval}h]" + fi + + local network_test="-n 4h" + if [[ "x${network_test_interval}" == "x" ]] + then + local network_test="-n 4h" + log "network test interval is empty, set to default value: [4h]" + elif [[ "x${network_test_interval}" == "x0" ]] + then + local network_test="" + log "network test diabled." + else + local network_test="-n ${network_test_interval}h" + log "network test interval: ${network_test_interval}" + fi + + log "cmd: ${download_dir}/NeverIdle ${cpu_test} ${mem_test} ${network_test}" + nohup ${download_dir}/NeverIdle ${cpu_test} ${mem_test} ${network_test} > ${download_dir}/NeverIdle.log 2>&1 & + local pid=$(pgrep NeverIdle) + log "NeverIdle [${pid}] is running" + log "log file: ${download_dir}/NeverIdle.log" + log "========================================" + log "run 'pkill NeverIdle' to stop it." + log "run 'rm -f ${download_dir}/NeverIdle ${download_dir}/NeverIdle.log' to clean it." +} + +function print_help_msg(){ + echo "usage:" + echo -e "\t-c \t cpu test interval, defaut: 2h, can't disable." + echo -e "\t-m \t memory test size, value/total memory range: 0/<4 1G/<13 2G/>13, 0 to disable test" + echo -e "\t-n \t network test interval, 0 to disable test" + echo -e "\t-h \t show help info." + exit 0 +} + +function read_args(){ + while getopts ":c:m:n:h" opt; do + case "$opt" in + c) + cpu_test_interval="$OPTARG";; + n) + network_test_interval="$OPTARG";; + m) + memory_test_size="$OPTARG";; + h) + print_help_msg;; + esac + done + + if [[ "${cpu_test_interval}" -lt 0 ]] + then + log "invalid cpu test interval [${cpu_test_interval}], set to 2" + cpu_test_interval="2" + fi + + if [[ "${network_test_interval}" -lt 0 ]] + then + log "invalid network test interval [${network_test_interval}], set to 4" + network_test_interval="4" + fi + + if [[ "${memory_test_size}" -lt 0 ]] + then + log "invalid memory size [${memory_test_size}]" + memory_test_size="" + fi + +} + +function init(){ + mem_total=$(free -g | awk '/Mem/ {print $2}') + + case $(uname -m) in + "x86_64") + platform="linux-amd64" + ;; + "aarch64") + platform="linux-arm64" + ;; + *) + log "Unsupported platform !" + exit 1 + ;; + esac +} + +function keep_stop(){ + pkill -9 NeverIdle +} + + +function main(){ + keep_stop + init + get_latest_info + download_and_run +} +read_args "$@" +main