甲骨文云 Oracle Cloud 服务器防回收保活 docker 命令

发布于 2023-02-06  1492 次阅读


原文地址

简介近期甲骨文出台了政策,将对闲置的服务器进行停机或者回收处理,为了防止被删,网上各路大神也出了很多教程来让服务器高负载,不过大多数都是试用 shell 脚本循环计算,dd 复制空文件或者一些类...

简介

近期甲骨文出台了政策,将对闲置的服务器进行停机或者回收处理,为了防止被删,网上各路大神也出了很多教程来让服务器高负载,不过大多数都是试用 shell 脚本循环计算,dd 复制空文件或者一些类似 lookbusy 等第三方软件来模拟高负载。

不过作为洁癖党,总是会避免安装一些不太了解的第三方软件,也但是一些脚本后台运行出问题,或者时间长了忘记了,所以还是觉得把脚本跑在 docker 里最合适,也最方便管理。可以做到想开就开,想关就关,还可以配合 crontab 定时开关。


教程

原理很简单,就是写了一段最简单的循环计算 shell 脚本,在 alpine 容器内部执行。只需要控制 docker 的启动和停止即可。

注意:本服务脚本仅占用 CPU 资源,甲骨文政策大概率满足其一即可。

更新

以下是Arm(4核24G) 的模版,如果是Amd(2核1G) CPUQuota=20%

https://www.oracle.com/cloud/networking/pricing/
甲骨文下载无限流量,上传免费10T。目前使用1m/s的下载方式(我不懂有没有满足网络的要求)


cat > /etc/systemd/system/KeepCPUMemory.service <<EOF
[Unit]
[Service]
CPUQuota=40%
ExecStart=/usr/bin/python3 /tmp/waste.py
[Install]
WantedBy=multi-user.target
EOF

cat > /tmp/waste.py <<EOF
import platform
if platform.machine()=="aarch64":
  memory = bytearray(int(2.4*1024*1024*1024)) # 2.4G (10% of 24G)
while True:
  pass
EOF

cat > /etc/systemd/system/KeepNetwork.service <<EOF
[Unit]
After=network-online.target
[Service]
ExecStart=/usr/bin/bash /tmp/network.sh 
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF

cat > /tmp/network.sh <<EOF
while true
do
  curl -s -o /dev/null --limit-rate 1M  http://cachefly.cachefly.net/100mb.test
done
EOF

systemctl daemon-reload
systemctl enable KeepCPUMemory --now
systemctl enable KeepNetwork --now

执行文件存放在/tmp目录。机器重启就失效。

CPU 占用效果

启动此容器后 CPU 占用大致效果图

docker

安装

curl -sSL https://get.docker.com/ | sh
#或者
apt install docker-ce

启动命令

docker run -d --name keeporaclealive --rm alpine sh -c "while true; do for i in {1..100000}; do j=$((i*i)); done; done"

停止命令

docker stop keeporaclealive

注意:上述启动命令加入了--rm参数,停止容器将自动删除容器,不会残留到系统中。

docker 常驻

启动命令

docker run -d --name keeporaclealive --restart always alpine sh -c "while true; do for i in {1..100000}; do j=$((i*i)); done; done"

上述命令将容器常驻,即使服务器重启也会自动启动服务。

停止命令

docker stop keeporaclealive
# 停止服务,容器不会被删除。
docker start keeporaclealive
# 再次启动容器。
docker rm keeporaclealive
# 停止后彻底删除容器。

docker compose

同时也可以用 docker compose 来管理,这样启动和停止命令会更加方便。

mkdir keeporaclealive
cd keeporaclealive
vi docker-compose.yml
# 创建 keeporaclealive 目录并新建 docker-compose.yml 文件,复制以下配置文件。

docker-compose.yml

version: '3'
services:
  keeporaclealive:
    image: alpine
    command: 'sh -c "while true; do for i in $$(seq 1 100000); do j=$$[i*i]; done; done"'
    restart: always

启动和停止可以用以下命令控制:

apt  install docker-compose
# 安装 docker-compose
docker-compose up -d
# 启动
docker-compose down
# 停止

crontab 定时任务,每日 02 点启动,每日 04 点停止。
根据自身情况修改 /root/keeporaclealive 目录地址

crontab -e
# 添加以下两条记录
0 02 * * * cd /root/keeporaclealive && /usr/bin/docker-compose up -d
0 04 * * * cd /root/keeporaclealive && /usr/bin/docker-compose down

或许明日太阳西下倦鸟已归时