├── LICENSE ├── README.md ├── README_CRON.md ├── bandwidth_occupier.service ├── bandwidth_occupier.sh ├── bandwidth_occupier.timer ├── cpu-limit.service ├── cpu-limit.sh ├── memory-limit.service ├── memory-limit.sh └── oalive.sh /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 spiritLHLS 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Oracle-server-keep-alive-script 2 | 3 | [![Hits](https://hits.spiritlhl.net/Oracle-server-keep-alive-script.svg?action=hit&title=Hits&title_bg=%23555555&count_bg=%2324dde1&edge_flat=false)](https://hits.spiritlhl.net) 4 | 5 | ## 甲骨文服务器保活脚本 6 | 7 | 适配系统:已在Ubuntu 20+,Debian 10+, Centos 7+, Oracle linux 8+,AlmaLinux 8.5+ 8 | 9 | 上述系统验证无问题,别的主流系统应该也没有问题 10 | 11 | 可选占用:CPU,内存,带宽 12 | 13 | 安装完毕后如果有问题请卸载脚本反馈问题(重复卸载也没问题) 14 | 15 | 所有资源(除了CPU)可选默认配置则动态占用,实时调整,避免服务器有别的任何资源已经超过限额了仍然再占用资源 16 | 17 | 为避免GitHub的CDN抽风加载不了新内容,所有新更新已使用[Gitlab仓库](https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script) 18 | 19 | 由于speedtest-go的release依赖于GitHub,所以请检查 [www.githubstatus.com](https://www.githubstatus.com/) ,有问题时无法安装带宽占用 20 | 21 | 请留意脚本当前更新日期:2023.09.24.08.37 22 | 23 | **由于友人实测,资源占用感觉也是玄学,一个号四个服务器全部停机,但号还在,也有人一直不占用,但就是没停机的问题,所以该项目将长期保持现有状态,非必要不再更新** 24 | 25 | **也有说要在上面解析一个网址做一个网站挂着的,感觉也是玄学,自己测试吧** 26 | 27 | ### 说明 28 | 29 | 选项1安装,选项2卸载,选项3更新安装引导脚本,选项4退出脚本 30 | 31 | 安装过程中无脑回车则全部可选的占用都占用,不需要什么占用输入```n```再回车 32 | 33 | 如果选择带宽占用,会询问使用speedtest-go占用还是使用wget占用,按照提示进行选择即可 34 | 35 | 有询问是否需要带宽占用的参数自定义,这时候默认选项就是```n```,回车就使用默认配置,输入```y```再回车则需要按照提示自定义参数 36 | 37 | ``` 38 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh -o oalive.sh && chmod +x oalive.sh && bash oalive.sh 39 | ``` 40 | 41 | 或 42 | 43 | ``` 44 | bash oalive.sh 45 | ``` 46 | 47 | 或 48 | 49 | ``` 50 | bash <(wget -qO- --no-check-certificate https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh) 51 | ``` 52 | 53 | ### 特点 54 | 55 | - 提供两种CPU占用模式:DD模拟占用和科学计算模式,用户可以自由选择,占用范围设置在15%至25%之间,更推荐DD模拟占用。 56 | - DD模拟占用在守护进程中设置了CPU占用的最高限制。 57 | - 默认情况下,CPU占用设置为25%最高值,计算方法是核数乘以20%,如果计算结果低于25%,则设置为25%;如果计算结果高于25%,则按照计算结果的比例进行设置。 58 | - 内存占用设置为占用总内存的25%,占用时间为300秒,休息时间为300秒。 59 | - 每300秒检测一次内存占用情况,并根据需要动态调整占用大小。如果内存占用已经大于25%,则不增加占用。 60 | - 在占用过程中,使用守护进程和开机自启服务,以确保占用任务持续且有效。 61 | - 默认选项的带宽占用每45分钟下载一次大小在1G至10G之间的文件,只进行下载而不保存。在下载过程中会占用硬盘空间,但在下载完成后会自动释放。 62 | - 默认选项的带宽占用动态调整实际下载的带宽/速率,限制每次下载的最长时长为6分钟。在每次下载之前,会测试最大可用带宽,并根据实时结果将下载速率设置为30%的带宽。 63 | - 带宽占用测试使用了speedtest-cli和speedtest-go两种工具,以防其中之一不可用时使用第二种工具,用户可以自定义设置带宽占用,此时详见设置提示。 64 | - 提供一键卸载所有占用服务的选项,卸载将删除所有脚本、服务、任务、守护进程和开机自启设置。 65 | - 提供一键检查更新的功能,更新范围仅限于脚本更新。**请在更新后重新设置占用服务** 66 | - 对所有进程执行增加唯一性检测,避免重复运行,使用PID文件进行判断。 67 | 68 | 如若不希望一键的,希望自定义设置时间的,请查看[README_CRON.md](https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/blob/main/%20README_CRON.md)自行设置定时任务 69 | 70 | ### 友链 71 | 72 | VPS融合怪测评项目 73 | 74 | Go版本:https://github.com/oneclickvirt/ecs 75 | 76 | Shell版本:https://github.com/spiritLHLS/ecs 77 | 78 | 一键虚拟化项目 79 | 80 | 国内 https://virt.spiritlhl.net/ 81 | 82 | 国际 https://www.spiritlhl.net/ 83 | 84 | ### 广告 85 | 86 | 87 | 88 | ## Stargazers over time 89 | 90 | [![Stargazers over time](https://starchart.cc/spiritLHLS/Oracle-server-keep-alive-script.svg)](https://starchart.cc/spiritLHLS/Oracle-server-keep-alive-script) 91 | -------------------------------------------------------------------------------- /README_CRON.md: -------------------------------------------------------------------------------- 1 | ### 自定义定时任务的命令 2 | 3 | 4 | 由于部分人需要自定义定时任务,我又懒得写定时套装,以下是和本脚本同类型占用的简短命令,怎么定时就自己搞吧,都是shell命令可以写到定时里 5 | 6 | 至于怎么定时,要么你在crontab中设置,要么在nezha监控面板设置,要么在宝塔定时任务中设置,怎么搞自己谷歌百度去吧 7 | 8 | 9 | #### CPU 10 | 11 | 下载脚本 12 | ``` 13 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/cpu-limit.sh -o cpu-limit.sh && chmod +x cpu-limit.sh 14 | mv cpu-limit.sh /usr/local/bin/cpu-limit.sh 15 | ``` 16 | 17 | CPU占用 18 | ``` 19 | bash /usr/local/bin/cpu-limit.sh 20 | ``` 21 | 22 | CPU释放 23 | ``` 24 | kill $(ps -efA | grep cpu-limit.sh | awk '{print $2}') && kill -9 $(cat /tmp/cpu-limit.pid) && rm -rf /tmp/cpu-limit.pid 25 | ``` 26 | 27 | #### 内存 28 | 29 | 内存占用 30 | 31 | 内存以MB计算的大小,修改xxxxx为对应数目 32 | 33 | ``` 34 | mkdir /tmp/memory && mount -t tmpfs -o size=xxxxxM tmpfs /tmp/memory && dd if=/dev/zero of=/tmp/memory/block 35 | ``` 36 | 37 | 内存释放 38 | ``` 39 | rm /tmp/memory/block && umount /tmp/memory && rmdir /tmp/memory 40 | ``` 41 | 42 | 内存占用实际只有ARM有要求(如果我没理解错的话) 43 | 44 | #### 网络占用,跑完自动释放 45 | 46 | 下载脚本 47 | ``` 48 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/bandwidth_occupier.sh -o bandwidth_occupier.sh && chmod +x bandwidth_occupier.sh 49 | mv bandwidth_occupier.sh /usr/local/bin/bandwidth_occupier.sh 50 | ``` 51 | 52 | 对应需要安装的```speedtest-cli```或```speedtest-go```自行安装 53 | 54 | 安装```speedtest-go```的记得执行```mv speedtest-go /usr/local/bin/ ``` 55 | 56 | 运行脚本(也就是你需要定时的命令) 57 | ``` 58 | bash /usr/local/bin/bandwidth_occupier.sh 59 | ``` 60 | -------------------------------------------------------------------------------- /bandwidth_occupier.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Bandwidth Occupier Service 3 | 4 | [Service] 5 | User=root 6 | #ExecStartPre=-/bin/bash -c 'kill $(ps -efA | grep bandwidth_occupier.sh | awk "{print $2}")' 7 | ExecStart=/bin/bash /usr/local/bin/bandwidth_occupier.sh 8 | 9 | [Install] 10 | WantedBy=multi-user.target 11 | -------------------------------------------------------------------------------- /bandwidth_occupier.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # by spiritlhl 3 | # from https://github.com/spiritLHLS/Oracle-server-keep-alive-script 4 | 5 | if [[ -d "/usr/share/locale/en_US.UTF-8" ]]; then 6 | export LANG=en_US.UTF-8 7 | export LC_ALL=en_US.UTF-8 8 | export LANGUAGE=en_US.UTF-8 9 | else 10 | export LANG=C.UTF-8 11 | export LC_ALL=C.UTF-8 12 | export LANGUAGE=C.UTF-8 13 | fi 14 | pid_file=/tmp/bandwidth_occupier.pid 15 | if [ -e "${pid_file}" ]; then 16 | # 如果 PID 文件存在,则读取其中的 PID 17 | pid=$(cat "${pid_file}") 18 | # 检查该 PID 是否对应一个正在运行的进程 19 | if ps -p "${pid}" >/dev/null; then 20 | echo "Error: Another instance of bandwidth_occupier.sh is already running with PID ${pid}" 21 | exit 1 22 | fi 23 | # 如果 PID 文件存在,但对应的进程已经停止运行,删除 PID 文件 24 | rm "${pid_file}" 25 | fi 26 | echo $$ >"${pid_file}" 27 | 28 | urls=('http://mirror.nl.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.dal10.us.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.hk.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.sfo12.us.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.de.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.syd10.au.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.wdc1.us.leaseweb.net/speedtest/10000mb.bin' 'http://mirror.wdc1.us.leaseweb.net/speedtest/10000mb.bin' 'https://speed.hetzner.de/10GB.bin' 'http://proof.ovh.net/files/10Gio.dat' 'http://lg-sin.fdcservers.net/10GBtest.zip' 'http://lg-tok.fdcservers.net/10GBtest.zip' 'http://lg-hkg.fdcservers.net/10GBtest.zip' 'http://lg-atl.fdcservers.net/10GBtest.zip' 'http://lg-chie.fdcservers.net/10GBtest.zip' 'http://lg-dene.fdcservers.net/10GBtest.zip' 'http://lg-hou.fdcservers.net/10GBtest.zip' 'http://lg-lax.fdcservers.net/10GBtest.zip' 'http://lg-mia.fdcservers.net/10GBtest.zip' 'http://lg-minn.fdcservers.net/10GBtest.zip' 'http://lg-nyc.fdcservers.net/10GBtest.zip' 'http://lg-sea.fdcservers.net/10GBtest.zip' 'http://lg-tor.fdcservers.net/10GBtest.zip' 'http://lg-spb.fdcservers.net/10GBtest.zip' 'http://lg-ams.fdcservers.net/10GBtest.zip' 'http://lg-dub.fdcservers.net/10GBtest.zip' 'http://lg-fra.fdcservers.net/10GBtest.zip' 'http://lg-hel.fdcservers.net/10GBtest.zip' 'http://lg-kie.fdcservers.net/10GBtest.zip' 'http://lg-lis.fdcservers.net/10GBtest.zip' 'http://lg-lon.fdcservers.net/10GBtest.zip' 'http://lg-mad.fdcservers.net/10GBtest.zip' 'http://lg-par2.fdcservers.net/10GBtest.zip' 'http://lg-sof.fdcservers.net/10GBtest.zip' 'http://lg-sto.fdcservers.net/10GBtest.zip' 'http://lg-vie.fdcservers.net/10GBtest.zip' 'http://lg-war.fdcservers.net/10GBtest.zip' 'http://lg-zur.fdcservers.net/10GBtest.zip' 'http://speedtest-ca.turnkeyinternet.net/10000mb.bin' 'http://speedtest-ny.turnkeyinternet.net/10000mb.bin' 'http://sea-repo.hostwinds.net/tests/10gb.zip' 'http://dal-repo.hostwinds.net/tests/10gb.zip' 'http://ams-repo.hostwinds.net/tests/10gb.zip' 'http://zgb-speedtest-1.tele2.net/10GB.zip' 'http://fra36-speedtest-1.tele2.net/10GB.zip' 'http://bks4-speedtest-1.tele2.net/10GB.zip' 'http://vln038-speedtest-1.tele2.net/10GB.zip' 'http://ams-speedtest-1.tele2.net/10GB.zip' 'http://bck-speedtest-1.tele2.net/10GB.zip' 'http://hgd-speedtest-1.tele2.net/10GB.zip') 29 | selected_url="" 30 | count=0 31 | for url in $(printf '%s\n' "${urls[@]}" | shuf); do 32 | if timeout 3s wget --tries=3 --spider "$url" 2>/dev/null; then 33 | selected_url=$url 34 | break 35 | fi 36 | count=$((count + 1)) 37 | if [[ $count -eq 20 ]]; then 38 | selected_url="http://speed.cloudflare.com/__down?bytes=1000000000" && break 39 | fi 40 | done 41 | if ! command -v speedtest-cli >/dev/null 2>&1; then 42 | bandwidth=$(/usr/local/bin/speedtest-go | awk '/^Download/ {print $2}' | head -2 | tail -1) 43 | else 44 | bandwidth=$(speedtest-cli --simple | awk '/^Download/ {print $2}') 45 | fi 46 | rate=$(echo "$bandwidth * 1024 * 1024 * 0.30" | bc | awk '{printf "%.0f\n", $1}') 47 | timeout 6m wget $selected_url --limit-rate=$rate -O /dev/null & 48 | rm "${pid_file}" 49 | -------------------------------------------------------------------------------- /bandwidth_occupier.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Run the Bandwidth Occupier every 45 minutes 3 | 4 | [Timer] 5 | OnBootSec=15min 6 | OnUnitActiveSec=45min 7 | 8 | [Install] 9 | WantedBy=timers.target 10 | -------------------------------------------------------------------------------- /cpu-limit.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Keep CPU usage 3 | 4 | [Service] 5 | User=root 6 | ExecStart=/bin/bash /usr/local/bin/cpu-limit.sh 7 | ExecStop=/bin/bash -c 'kill $(cat /tmp/cpu-limit.pid) && rm -rf /tmp/cpu-limit.pid' 8 | Restart=always 9 | RestartSec=60s 10 | RestartKillSignal=SIGKILL 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /cpu-limit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # by spiritlhl 3 | # from https://github.com/spiritLHLS/Oracle-server-keep-alive-script 4 | 5 | if [[ -d "/usr/share/locale/en_US.UTF-8" ]]; then 6 | export LANG=en_US.UTF-8 7 | export LC_ALL=en_US.UTF-8 8 | export LANGUAGE=en_US.UTF-8 9 | else 10 | export LANG=C.UTF-8 11 | export LC_ALL=C.UTF-8 12 | export LANGUAGE=C.UTF-8 13 | fi 14 | ulimit -u 10 15 | pid_file=/tmp/cpu-limit.pid 16 | if [ -e "${pid_file}" ]; then 17 | # 如果 PID 文件存在,则读取其中的 PID 18 | pid=$(cat "${pid_file}") 19 | # 检查该 PID 是否对应一个正在运行的进程 20 | if ps -p "${pid}" >/dev/null; then 21 | echo "Error: Another instance of cpu-limit.sh is already running with PID ${pid}" 22 | exit 1 23 | fi 24 | # 如果 PID 文件存在,但对应的进程已经停止运行,删除 PID 文件 25 | rm "${pid_file}" 26 | fi 27 | echo $$ >"${pid_file}" 28 | 29 | # function calculate_primes() { 30 | # size=$1 31 | # for ((i=2;i<=$size;i++)); do 32 | # for ((j=2;j<=i/2;j++)); do 33 | # if [ $((i%j)) == 0 ]; then 34 | # break 35 | # fi 36 | # done 37 | # if [ $j -gt $((i/2)) ]; then 38 | # echo $i &> /dev/null 39 | # fi 40 | # done 41 | # } 42 | 43 | # low_main() { 44 | # while true; do 45 | # cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') 46 | # if (( $(echo "$cpu_usage < 15" | bc -l) )); then 47 | # if [ $(( $(date +%s) % 2 )) == 0 ]; then 48 | # size=$((size+10)) 49 | # else 50 | # interval=$(echo "$interval - 0.5" | bc) 51 | # fi 52 | # if [ $size -lt $MIN_SIZE ]; then 53 | # size=$MIN_SIZE 54 | # fi 55 | # if [ $(echo "$interval < $MIN_INTERVAL" | bc -l) -eq 1 ]; then 56 | # interval=$MIN_INTERVAL 57 | # fi 58 | # calculate_primes $size & 59 | # elif (( $(echo "$cpu_usage > 25" | bc -l) )); then 60 | # if [ $(( $(date +%s) % 2 )) == 0 ]; then 61 | # size=$((size-10)) 62 | # else 63 | # interval=$(echo "$interval + 0.5" | bc) 64 | # fi 65 | # if [ $size -lt $MIN_SIZE ]; then 66 | # size=$MIN_SIZE 67 | # fi 68 | # if [ $(echo "$interval < $MIN_INTERVAL" | bc -l) -eq 1 ]; then 69 | # interval=$MIN_INTERVAL 70 | # fi 71 | # else 72 | # echo "" 73 | # fi 74 | # sleep $interval 75 | # done 76 | # } 77 | 78 | high_main() { 79 | for ((i = 0; i < $cores; i++)); do 80 | { 81 | dd if=/dev/zero of=/dev/null 82 | } & 83 | done 84 | wait 85 | } 86 | 87 | arch=$(uname -m) 88 | cores=$(nproc) 89 | # if [ "$arch" = "armv7l" ] || [ "$arch" = "armv8" ] || [ "$arch" = "armv8l" ] || [ "$arch" = "aarch64" ] || [ "$arch" = "arm" ] ; then 90 | # if [ $cores -eq 3 ] || [ $cores -eq 4 ]; then 91 | # high_main 92 | # else 93 | # size=600 94 | # interval=5 95 | # MIN_SIZE=400 96 | # MIN_INTERVAL=1 97 | # low_main 98 | # fi 99 | # else 100 | # size=450 101 | # interval=10 102 | # MIN_SIZE=200 103 | # MIN_INTERVAL=2 104 | # low_main 105 | # fi 106 | high_main 107 | rm "${pid_file}" 108 | -------------------------------------------------------------------------------- /memory-limit.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Keep memory usage 3 | 4 | [Service] 5 | User=root 6 | #ExecStartPre=-/bin/bash -c 'kill $(ps -efA | grep memory-limit.sh | awk "{print $2}")' 7 | ExecStart=/bin/bash /usr/local/bin/memory-limit.sh 8 | #Restart=on-failure 9 | 10 | [Install] 11 | WantedBy=multi-user.target 12 | -------------------------------------------------------------------------------- /memory-limit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # by spiritlhl 3 | # from https://github.com/spiritLHLS/Oracle-server-keep-alive-script 4 | 5 | if [[ -d "/usr/share/locale/en_US.UTF-8" ]]; then 6 | export LANG=en_US.UTF-8 7 | export LC_ALL=en_US.UTF-8 8 | export LANGUAGE=en_US.UTF-8 9 | else 10 | export LANG=C.UTF-8 11 | export LC_ALL=C.UTF-8 12 | export LANGUAGE=C.UTF-8 13 | fi 14 | pid_file=/tmp/memory-limit.pid 15 | if [ -e "${pid_file}" ]; then 16 | # 如果 PID 文件存在,则读取其中的 PID 17 | pid=$(cat "${pid_file}") 18 | # 检查该 PID 是否对应一个正在运行的进程 19 | if ps -p "${pid}" >/dev/null; then 20 | echo "Error: Another instance of memory-limit.sh is already running with PID ${pid}" 21 | exit 1 22 | fi 23 | # 如果 PID 文件存在,但对应的进程已经停止运行,删除 PID 文件 24 | rm "${pid_file}" 25 | rm /dev/shm/file 26 | fi 27 | echo $$ >"${pid_file}" 28 | 29 | while true; do 30 | mem_total=$(free | awk '/Mem/ {print $2}') 31 | mem_used=$(free | awk '/Mem/ {print $3}') 32 | mem_usage=$(echo "scale=2; $mem_used/$mem_total * 100.0" | bc) 33 | if [ $(echo "$mem_usage < 25" | bc) -eq 1 ]; then 34 | target_mem_usage=$(echo "scale=0; $mem_total * 0.25 / 1" | bc) 35 | echo "target_mem_usage: $target_mem_usage" 36 | stress_mem=$(echo "$target_mem_usage - $mem_used" | bc) 37 | echo "stress_mem: $stress_mem" 38 | stress_mem_in_mb=$(echo "scale=0; $stress_mem / 1024" | bc) 39 | echo "stress_mem_in_mb: $stress_mem_in_mb" 40 | fallocate -l "${stress_mem_in_mb}M" /dev/shm/file 41 | sleep 300 42 | rm /dev/shm/file 43 | else 44 | sleep 300 45 | fi 46 | done 47 | 48 | rm "${pid_file}" 49 | -------------------------------------------------------------------------------- /oalive.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # by spiritlhl 3 | # from https://github.com/spiritLHLS/Oracle-server-keep-alive-script 4 | 5 | ver="2023.09.24.08.37" 6 | cd /root >/dev/null 2>&1 7 | _red() { echo -e "\033[31m\033[01m$@\033[0m"; } 8 | _green() { echo -e "\033[32m\033[01m$@\033[0m"; } 9 | _yellow() { echo -e "\033[33m\033[01m$@\033[0m"; } 10 | _blue() { echo -e "\033[36m\033[01m$@\033[0m"; } 11 | reading() { read -rp "$(_green "$1")" "$2"; } 12 | RED="\033[31m" 13 | PLAIN="\033[0m" 14 | REGEX=("debian" "ubuntu" "centos|red hat|kernel|oracle linux|alma|rocky" "'amazon linux'" "fedora" "arch") 15 | RELEASE=("Debian" "Ubuntu" "CentOS" "CentOS" "Fedora" "Arch") 16 | PACKAGE_UPDATE=("! apt-get update && apt-get --fix-broken install -y && apt-get update" "apt-get update" "yum -y update" "yum -y update" "yum -y update" "pacman -Sy") 17 | PACKAGE_INSTALL=("apt-get -y install" "apt-get -y install" "yum -y install" "yum -y install" "yum -y install" "pacman -Sy --noconfirm --needed") 18 | PACKAGE_REMOVE=("apt-get -y remove" "apt-get -y remove" "yum -y remove" "yum -y remove" "yum -y remove" "pacman -Rsc --noconfirm") 19 | PACKAGE_UNINSTALL=("apt-get -y autoremove" "apt-get -y autoremove" "yum -y autoremove" "yum -y autoremove" "yum -y autoremove" "") 20 | CMD=("$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)" "$(hostnamectl 2>/dev/null | grep -i system | cut -d : -f2)" "$(lsb_release -sd 2>/dev/null)" "$(grep -i description /etc/lsb-release 2>/dev/null | cut -d \" -f2)" "$(grep . /etc/redhat-release 2>/dev/null)" "$(grep . /etc/issue 2>/dev/null | cut -d \\ -f1 | sed '/^[ ]*$/d')" "$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)") 21 | SYS="${CMD[0]}" 22 | [[ -n $SYS ]] || exit 1 23 | for ((int = 0; int < ${#REGEX[@]}; int++)); do 24 | if [[ $(echo "$SYS" | tr '[:upper:]' '[:lower:]') =~ ${REGEX[int]} ]]; then 25 | SYSTEM="${RELEASE[int]}" 26 | [[ -n $SYSTEM ]] && break 27 | fi 28 | done 29 | utf8_locale=$(locale -a 2>/dev/null | grep -i -m 1 -E "UTF-8|utf8") 30 | if [[ -z "$utf8_locale" ]]; then 31 | echo "No UTF-8 locale found" 32 | else 33 | export LC_ALL="$utf8_locale" 34 | export LANG="$utf8_locale" 35 | export LANGUAGE="$utf8_locale" 36 | echo "Locale set to $utf8_locale" 37 | fi 38 | [[ $EUID -ne 0 ]] && echo -e "${RED}请使用 root 用户运行本脚本!${PLAIN}" && exit 1 39 | 40 | checkver() { 41 | running_version=$(grep "ver=\"[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}" "$0" | awk -F '"' '{print $2}') 42 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh -o oalive1.sh && chmod +x oalive1.sh 43 | downloaded_version=$(grep "ver=\"[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}" oalive1.sh | awk -F '"' '{print $2}') 44 | if [ "$running_version" != "$downloaded_version" ]; then 45 | _yellow "更新脚本从 $ver 到 $downloaded_version" 46 | mv oalive1.sh "$0" 47 | uninstall 48 | _yellow "5秒后请重新设置占用,已自动卸载原有占用" 49 | sleep 5 50 | bash oalive.sh 51 | else 52 | _green "本脚本已是最新脚本无需更新" 53 | rm -rf oalive1.sh* 54 | fi 55 | } 56 | 57 | checkupdate() { 58 | _yellow "Updating package management sources" 59 | ${PACKAGE_UPDATE[int]} >/dev/null 2>&1 60 | } 61 | 62 | boinc() { 63 | _green "\n Install docker.\n " 64 | if ! systemctl is-active docker >/dev/null 2>&1; then 65 | if [ $SYSTEM = "CentOS" ]; then 66 | ${PACKAGE_INSTALL[int]} yum-utils 67 | yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && 68 | ${PACKAGE_INSTALL[int]} docker-ce docker-ce-cli containerd.io 69 | systemctl enable --now docker 70 | else 71 | ${PACKAGE_INSTALL[int]} docker.io 72 | fi 73 | fi 74 | docker ps -a | awk '{print $NF}' | grep -qw boinc && _yellow " Remove the boinc container.\n " && docker rm -f boinc >/dev/null 2>&1 75 | if [ "$SYSTEM" == "Ubuntu" ] || [ "$SYSTEM" == "Debian" ]; then 76 | docker run -d --restart unless-stopped --name boinc -v /var/lib/boinc:/var/lib/boinc -e "BOINC_CMD_LINE_OPTIONS=--allow_remote_gui_rpc --cpu_usage_limit=20" boinc/client 77 | elif [ "$SYSTEM" == "Centos" ]; then 78 | docker run -d --restart unless-stopped --name boinc -v /var/lib/boinc:/var/lib/boinc -e "BOINC_CMD_LINE_OPTIONS=--allow_remote_gui_rpc --cpu_usage_limit=20" boinc/client:centos 79 | else 80 | echo "Error: The operating system is not supported." 81 | exit 1 82 | fi 83 | systemctl enable docker 84 | _green "CPU限制安装成功" 85 | _green "Boinc is installed as docker and using" 86 | } 87 | 88 | calculate() { 89 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/cpu-limit.sh -o cpu-limit.sh && chmod +x cpu-limit.sh 90 | mv cpu-limit.sh /usr/local/bin/cpu-limit.sh 91 | chmod +x /usr/local/bin/cpu-limit.sh 92 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/cpu-limit.service -o cpu-limit.service && chmod +x cpu-limit.service 93 | mv cpu-limit.service /etc/systemd/system/cpu-limit.service 94 | line_number=7 95 | total_cores=0 96 | if [ -f "/proc/cpuinfo" ]; then 97 | total_cores=$(grep -c ^processor /proc/cpuinfo) 98 | else 99 | total_cores=$(nproc) 100 | fi 101 | if [ "$total_cores" == "2" ] || [ "$total_cores" == "3" ] || [ "$total_cores" == "4" ]; then 102 | cpu_limit=$(echo "$total_cores * 20" | bc) 103 | else 104 | cpu_limit=25 105 | fi 106 | sed -i "${line_number}a CPUQuota=${cpu_limit}%" /etc/systemd/system/cpu-limit.service 107 | systemctl daemon-reload 108 | systemctl enable cpu-limit.service 109 | if systemctl start cpu-limit.service; then 110 | _green "CPU限制安装成功 脚本路径: /usr/local/bin/cpu-limit.sh" 111 | else 112 | restorecon /etc/systemd/system/cpu-limit.service 113 | systemctl enable cpu-limit.service 114 | systemctl start cpu-limit.service 115 | _green "CPU限制安装成功 脚本路径: /usr/local/bin/cpu-limit.sh" 116 | fi 117 | _green "The CPU limit script has been installed at /usr/local/bin/cpu-limit.sh" 118 | } 119 | 120 | memory() { 121 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/memory-limit.sh -o memory-limit.sh && chmod +x memory-limit.sh 122 | mv memory-limit.sh /usr/local/bin/memory-limit.sh 123 | chmod +x /usr/local/bin/memory-limit.sh 124 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/memory-limit.service -o memory-limit.service && chmod +x memory-limit.service 125 | mv memory-limit.service /etc/systemd/system/memory-limit.service 126 | systemctl daemon-reload 127 | systemctl enable memory-limit.service 128 | if systemctl start memory-limit.service; then 129 | _green "内存限制安装成功 脚本路径: /usr/local/bin/memory-limit.sh" 130 | else 131 | restorecon /etc/systemd/system/memory-limit.service 132 | systemctl enable memory-limit.service 133 | systemctl start memory-limit.service 134 | _green "内存限制安装成功 脚本路径: /usr/local/bin/memory-limit.sh" 135 | fi 136 | _green "The memory limit script has been installed at /usr/local/bin/memory-limit.sh" 137 | } 138 | 139 | bandwidth() { 140 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/bandwidth_occupier.sh -o bandwidth_occupier.sh && chmod +x bandwidth_occupier.sh 141 | mv bandwidth_occupier.sh /usr/local/bin/bandwidth_occupier.sh 142 | chmod +x /usr/local/bin/bandwidth_occupier.sh 143 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/bandwidth_occupier.timer -o bandwidth_occupier.timer && chmod +x bandwidth_occupier.timer 144 | mv bandwidth_occupier.timer /etc/systemd/system/bandwidth_occupier.timer 145 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/bandwidth_occupier.service -o bandwidth_occupier.service && chmod +x bandwidth_occupier.service 146 | mv bandwidth_occupier.service /etc/systemd/system/bandwidth_occupier.service 147 | reading "需要自定义带宽占用的设置吗? (y/[n]) " answer 148 | if [ "$answer" == "y" ]; then 149 | # sed -i '/^bandwidth\|^rate/s/^/#/' /usr/local/bin/bandwidth_occupier.sh 150 | sed -i '41,47s/^/# /' /usr/local/bin/bandwidth_occupier.sh 151 | reading "输入你需要的带宽大小(以mbps为单位,例如10mbps输入10): " rate_mbps 152 | rate=$((rate_mbps * 1000000)) 153 | reading "输入你需要请求的时长(以分钟为单位,例如10分钟输入10): " timeout 154 | # sed -i 's/^timeout/#timeout/' /usr/local/bin/bandwidth_occupier.sh 155 | sed -i '47a\timeout '$timeout'm wget $selected_url --limit-rate='$rate' -O /dev/null &' /usr/local/bin/bandwidth_occupier.sh 156 | reading "输入你需要间隔的时长(以分钟为单位,例如45分钟输入45): " interval 157 | sed -i "s/^OnUnitActiveSec.*/OnUnitActiveSec=$interval/" /etc/systemd/system/bandwidth_occupier.timer 158 | else 159 | _green "\n使用默认配置,45分钟间隔,请求6分钟,请求速率为最大速度的30%" 160 | if ! command -v speedtest-cli >/dev/null 2>&1; then 161 | echo "speedtest-cli not found, installing..." 162 | _yellow "Installing speedtest-cli" 163 | rm -rf /etc/apt/sources.list.d/speedtest.list >/dev/null 2>&1 164 | ${PACKAGE_REMOVE[int]} speedtest >/dev/null 2>&1 165 | ${PACKAGE_REMOVE[int]} speedtest-cli >/dev/null 2>&1 166 | checkupdate 167 | ${PACKAGE_INSTALL[int]} speedtest-cli 168 | fi 169 | if ! command -v speedtest-cli >/dev/null 2>&1; then 170 | ARCH=$(uname -m) 171 | if [[ "$ARCH" == "armv7l" || "$ARCH" == "armv8" || "$ARCH" == "armv8l" || "$ARCH" == "aarch64" ]]; then 172 | FILE_URL="${cdn_success_url}https://github.com/showwin/speedtest-go/releases/download/v1.5.2/speedtest-go_1.5.2_Linux_arm64.tar.gz" 173 | elif [[ $ARCH == "i386" ]]; then 174 | FILE_URL="${cdn_success_url}https://github.com/showwin/speedtest-go/releases/download/v1.5.2/speedtest-go_1.5.2_Linux_i386.tar.gz" 175 | elif [[ $ARCH == "x86_64" ]]; then 176 | FILE_URL="${cdn_success_url}https://github.com/showwin/speedtest-go/releases/download/v1.5.2/speedtest-go_1.5.2_Linux_x86_64.tar.gz" 177 | else 178 | _red "不支持该架构:$ARCH" 179 | exit 1 180 | fi 181 | wget -q -O speedtest-go_1.5.2_Linux.tar.gz $FILE_URL 182 | if ! command -v tar >/dev/null 2>&1; then 183 | yum install -y tar 184 | fi 185 | chmod 777 speedtest-go_1.5.2_Linux.tar.gz 186 | tar -xvf speedtest-go_1.5.2_Linux.tar.gz 187 | chmod 777 speedtest-go 188 | mv speedtest-go /usr/local/bin/ 189 | rm -rf README.md* LICENSE* >/dev/null 2>&1 190 | rm -rf speedtest-go_1.5.2_Linux.tar.gz* >/dev/null 2>&1 191 | fi 192 | fi 193 | systemctl daemon-reload 194 | systemctl enable bandwidth_occupier.timer 195 | if systemctl start bandwidth_occupier.timer; then 196 | _green "带宽限制安装成功 脚本路径: /usr/local/bin/bandwidth_occupier.sh" 197 | else 198 | restorecon /etc/systemd/system/bandwidth_occupier.timer 199 | restorecon /etc/systemd/system/bandwidth_occupier.service 200 | systemctl enable bandwidth_occupier.timer 201 | systemctl start bandwidth_occupier.timer 202 | _green "带宽限制安装成功 脚本路径: /usr/local/bin/bandwidth_occupier.sh" 203 | fi 204 | _green "The bandwidth limit script has been installed at /usr/local/bin/bandwidth_occupier.sh" 205 | } 206 | 207 | cdn_urls=("https://cdn0.spiritlhl.top/" "http://cdn3.spiritlhl.net/" "http://cdn1.spiritlhl.net/" "https://ghproxy.com/" "http://cdn2.spiritlhl.net/") 208 | 209 | check_cdn() { 210 | local o_url=$1 211 | for cdn_url in "${cdn_urls[@]}"; do 212 | if curl -sL -k "$cdn_url$o_url" --max-time 6 | grep -q "success" >/dev/null 2>&1; then 213 | export cdn_success_url="$cdn_url" 214 | return 215 | fi 216 | sleep 0.5 217 | done 218 | export cdn_success_url="" 219 | } 220 | 221 | check_cdn_file() { 222 | check_cdn "https://raw.githubusercontent.com/spiritLHLS/ecs/main/back/test" 223 | if [ -n "$cdn_success_url" ]; then 224 | _yellow "CDN available, using CDN" 225 | else 226 | _yellow "No CDN available, no use CDN" 227 | fi 228 | } 229 | 230 | download_speedtest_go_file() { 231 | cd /root >/dev/null 2>&1 232 | file="/etc/speedtest-cli/speedtest-go" 233 | if [[ -e "$file" ]]; then 234 | _green "speedtest-go found" 235 | return 236 | fi 237 | local sys_bit="$1" 238 | if [ "$sys_bit" = "aarch64" ]; then 239 | sys_bit="arm64" 240 | fi 241 | rm -rf speedtest-go* 242 | local url3="${cdn_success_url}https://github.com/showwin/speedtest-go/releases/download/v1.6.0/speedtest-go_1.6.0_Linux_${sys_bit}.tar.gz" 243 | wget $url3 244 | if [ $? -eq 0 ]; then 245 | _green "Used speedtest-go" 246 | fi 247 | if [ ! -d "/etc/speedtest-cli" ]; then 248 | mkdir -p "/etc/speedtest-cli" 249 | fi 250 | if [ -f "./speedtest-go_1.6.0_Linux_${sys_bit}.tar.gz" ]; then 251 | tar -zxf speedtest-go_1.6.0_Linux_${sys_bit}.tar.gz -C /etc/speedtest-cli 252 | chmod 777 /etc/speedtest-cli/speedtest-go 253 | rm -f speedtest-go* 254 | else 255 | _red "Error: Failed to download speedtest tool." 256 | exit 1 257 | fi 258 | } 259 | 260 | install_speedtest_go() { 261 | cd /root >/dev/null 2>&1 262 | _yellow "checking speedtest" 263 | sys_bit="" 264 | local sysarch="$(uname -m)" 265 | case "${sysarch}" in 266 | "x86_64" | "x86" | "amd64" | "x64") sys_bit="x86_64" ;; 267 | "i386" | "i686") sys_bit="i386" ;; 268 | "aarch64" | "armv7l" | "armv8" | "armv8l") sys_bit="aarch64" ;; 269 | "s390x") sys_bit="s390x" ;; 270 | "riscv64") sys_bit="riscv64" ;; 271 | "ppc64le") sys_bit="ppc64le" ;; 272 | "ppc64") sys_bit="ppc64" ;; 273 | *) sys_bit="x86_64" ;; 274 | esac 275 | download_speedtest_go_file "${sys_bit}" 276 | } 277 | 278 | bandwidth_speedtest_go() { 279 | install_speedtest_go 280 | cd /root >/dev/null 2>&1 281 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/bandwidth_occupier.timer -o bandwidth_occupier.timer && chmod +x bandwidth_occupier.timer 282 | mv bandwidth_occupier.timer /etc/systemd/system/bandwidth_occupier.timer 283 | curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/bandwidth_occupier.service -o bandwidth_occupier.service && chmod +x bandwidth_occupier.service 284 | mv bandwidth_occupier.service /etc/systemd/system/bandwidth_occupier.service 285 | file_content=$(cat /etc/systemd/system/bandwidth_occupier.service) 286 | new_file_content=$(echo "$file_content" | sed '7s/.*/ExecStart=\/bin\/bash -c '\''for i in {1..10}; do \/etc\/speedtest-cli\/speedtest-go; done'\''/') 287 | echo "$new_file_content" >/etc/systemd/system/bandwidth_occupier.service 288 | systemctl daemon-reload 289 | systemctl enable bandwidth_occupier.timer 290 | if systemctl start bandwidth_occupier.timer; then 291 | _green "带宽占用安装成功 speedtest-go路径: /etc/speedtest-cli/speedtest-go" 292 | fi 293 | _green "The speedtest-go has been installed at /etc/speedtest-cli/speedtest-go" 294 | } 295 | 296 | uninstall() { 297 | docker stop boinc &>/dev/null 298 | docker rm boinc &>/dev/null 299 | docker rmi boinc &>/dev/null 300 | if [ -f "/etc/systemd/system/cpu-limit.service" ]; then 301 | systemctl stop cpu-limit.service 302 | systemctl disable cpu-limit.service 303 | rm -rf /etc/systemd/system/cpu-limit.service 304 | rm -rf /usr/local/bin/cpu-limit.sh* 305 | kill $(pgrep dd) &>/dev/null 306 | kill $(ps -efA | grep cpu-limit.sh | awk '{print $2}') &>/dev/null 307 | fi 308 | rm -rf /tmp/cpu-limit.pid &>/dev/null 309 | _yellow "已卸载CPU占用 - The cpu limit script has been uninstalled successfully." 310 | if [ -f "/etc/systemd/system/memory-limit.service" ]; then 311 | systemctl stop memory-limit.service 312 | systemctl disable memory-limit.service 313 | rm -rf /etc/systemd/system/memory-limit.service 314 | rm -rf /usr/local/bin/memory-limit.sh* 315 | rm -rf /dev/shm/file 316 | kill $(ps -efA | grep memory-limit.sh | awk '{print $2}') &>/dev/null 317 | rm -rf /tmp/memory-limit.pid &>/dev/null 318 | _yellow "已卸载内存占用 - The memory limit script has been uninstalled successfully." 319 | fi 320 | if [ -f "/etc/systemd/system/bandwidth_occupier.service" ]; then 321 | systemctl stop bandwidth_occupier 322 | systemctl disable bandwidth_occupier 323 | rm -rf /etc/systemd/system/bandwidth_occupier.service 324 | rm -rf /usr/local/bin/bandwidth_occupier.sh* 325 | systemctl stop bandwidth_occupier.timer 326 | systemctl disable bandwidth_occupier.timer 327 | rm -rf /etc/systemd/system/bandwidth_occupier.timer 328 | rm -rf /usr/local/bin/speedtest-go &>/dev/null 329 | kill $(ps -efA | grep bandwidth_occupier.sh | awk '{print $2}') &>/dev/null 330 | rm -rf /tmp/bandwidth_occupier.pid &>/dev/null 331 | rm -rf /etc/speedtest-cli &>/dev/null 332 | _yellow "已卸载带宽占用 - The bandwidth occupier and timer script has been uninstalled successfully." 333 | fi 334 | systemctl daemon-reload 335 | } 336 | 337 | check_and_install() { 338 | local command_name=$1 339 | local package_name=$2 340 | 341 | if ! command -v $command_name >/dev/null 2>&1; then 342 | echo "$command_name not found, installing..." 343 | _yellow "Installing $package_name" 344 | ${PACKAGE_INSTALL[int]} $package_name 345 | fi 346 | } 347 | 348 | pre_check() { 349 | reading "是否需要更新软件包管理器?y/[n]:" apt_option 350 | if [ "$apt_option" == y ] || [ "$apt_option" == Y ]; then 351 | checkupdate 352 | fi 353 | if [[ "$SYSTEM" == "CentOS" ]]; then 354 | ${PACKAGE_INSTALL[int]} epel-release 355 | fi 356 | ${PACKAGE_INSTALL[int]} dmidecode >/dev/null 2>&1 357 | check_and_install wget wget 358 | check_and_install bc bc 359 | check_and_install fallocate util-linux 360 | check_and_install nproc coreutils 361 | check_cdn_file 362 | } 363 | 364 | check_service_status() { 365 | service_name="$1" 366 | if systemctl is-active --quiet "$service_name"; then 367 | _blue "$service_name 已设置" 368 | else 369 | _blue "$service_name 未设置" 370 | fi 371 | } 372 | 373 | check_services_status() { 374 | check_service_status "cpu-limit.service" 375 | check_service_status "memory-limit.service" 376 | if [ -e "/usr/local/bin/bandwidth_occupier.sh" ]; then 377 | if grep -qE '^\s*#' <(sed -n '32,38p' /usr/local/bin/bandwidth_occupier.sh); then 378 | line=$(sed -n '39p' /usr/local/bin/bandwidth_occupier.sh) 379 | timeout=$(echo "$line" | awk '{print $2}' | awk -F 'm' '{print $1}') 380 | limit_rate=$(echo "$line" | awk -F '--limit-rate=' '{print $2}' | awk '{print $1}') 381 | limit_rate_mbps=$(echo "scale=2; $limit_rate/1000000" | bc) 382 | on_unit_active_sec=$(grep -oP '^OnUnitActiveSec *= *\K[^ ]+' /etc/systemd/system/bandwidth_occupier.timer) 383 | _blue "带宽占用使用配置:每隔 $on_unit_active_sec 分钟占用 $limit_rate_mbps Mbps 速率下载文件 $timeout 分钟" 384 | else 385 | _blue "带宽占用使用配置:自动检测带宽每隔45分钟占用6分钟以最大带宽的30%速率下载文件" 386 | fi 387 | _blue "bandwidth_occupier.service 已设置" 388 | elif [ -e "/etc/speedtest-cli/speedtest-go" ]; then 389 | _blue "带宽占用使用配置:使用speedtest-go每45分钟执行10次进行占用,使用机器最大的带宽" 390 | _blue "bandwidth_occupier.service 已设置" 391 | else 392 | _blue "bandwidth_occupier.service 未设置" 393 | fi 394 | } 395 | 396 | main() { 397 | _green "当前脚本更新时间(请注意比对仓库说明): $ver" 398 | _green "仓库:https://github.com/spiritLHLS/Oracle-server-keep-alive-script" 399 | check_services_status 400 | echo "选择你的选项:" 401 | echo "1. 安装保活服务" 402 | echo "2. 卸载保活服务" 403 | echo "3. 一键更新脚本" 404 | echo "4. 退出程序" 405 | while true; do 406 | reading "你的选择:" option 407 | case $option in 408 | 1) 409 | pre_check 410 | echo "选择你需要占用CPU时使用的程序:" 411 | echo "1. 本机DD模拟占用(20%~25%) [推荐]" 412 | echo "2. BOINC-docker服务(20%)(https://github.com/BOINC/boinc) [不推荐]" 413 | echo "3. 不限制" 414 | reading "你的选择:" cpu_option 415 | if [ $cpu_option == 2 ]; then 416 | boinc 417 | elif [ $cpu_option == 3 ]; then 418 | echo "" 419 | else 420 | calculate 421 | fi 422 | reading "需要限制内存吗? ([y]/n): " memory_confirm 423 | if [ "$memory_confirm" != "n" ] && [ "$memory_confirm" != "N" ]; then 424 | memory 425 | fi 426 | reading "需要限制带宽吗? ([y]/n): " bandwidth_confirm 427 | if [ "$bandwidth_confirm" != "n" ] && [ "$bandwidth_confirm" != "N" ]; then 428 | echo "(1) 使用speedtest-go消耗带宽(无法实时限制流量,消耗时占满机器带宽,但所有机器都能保证有占用)" 429 | echo "(2) 使用wget下载测速文件消耗带宽(可实时限制流量,消耗时按百分比占用带宽,但可能在某些机器上执行失败无法占用)" 430 | reading "请输入选择的选项(默认回车为选项2): " wget_confirm 431 | if [ "$wget_confirm" == "1" ] || [ "$wget_confirm" == 1 ]; then 432 | bandwidth_speedtest_go 433 | else 434 | bandwidth 435 | fi 436 | fi 437 | break 438 | ;; 439 | 2) 440 | uninstall 441 | exit 0 442 | break 443 | ;; 444 | 3) 445 | checkver 446 | break 447 | ;; 448 | 4) 449 | echo "退出程序" 450 | exit 1 451 | break 452 | ;; 453 | *) 454 | echo "无效选项,请重新输入" 455 | ;; 456 | esac 457 | done 458 | } 459 | 460 | main 461 | --------------------------------------------------------------------------------