no_idle.sh
Bash script to black idle state for Oracle Cloud Free-tier VPS
This commit is contained in:
commit
768f5782c2
173
no_idle.sh
Normal file
173
no_idle.sh
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user