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