简介
近期甲骨文出台了政策,将对闲置的服务器进行停机或者回收处理,为了防止被删,网上各路大神也出了很多教程来让服务器高负载,不过大多数都是试用 shell 脚本循环计算,dd 复制空文件或者一些类似 lookbusy 等第三方软件来模拟高负载。
不过作为洁癖党,总是会避免安装一些不太了解的第三方软件,也但是一些脚本后台运行出问题,或者时间长了忘记了,所以还是觉得把脚本跑在 docker 里最合适,也最方便管理。可以做到想开就开,想关就关,还可以配合 crontab 定时开关。
更多甲骨文云 Oracle Cloud 相关技巧,教程及信息,请持续关注甲骨文云 Oracle Cloud 系列文章汇总:
本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.
教程
原理很简单,就是写了一段最简单的循环计算 shell 脚本,在 alpine 容器内部执行。只需要控制 docker 的启动和停止即可。
注意:本服务脚本仅占用 CPU 资源,甲骨文政策大概率满足其一即可。
CPU 占用效果
启动此容器后 CPU 占用大致效果图
docker
启动命令
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
启动和停止可以用以下命令控制:
docker-compose up -d
# 启动
docker-compose down
# 停止
crontab 定时任务,每日 10 点启动,每日 14 点停止。根据自身情况修改 /root/keeporaclealive 目录地址
crontab -e
# 添加以下两条记录
0 10 * * * cd /root/keeporaclealive && /usr/local/bin/docker-compose up -d
0 14 * * * cd /root/keeporaclealive && /usr/local/bin/docker-compose down
结语
更多甲骨文云 Oracle Cloud 相关技巧,教程及信息,请持续关注甲骨文云 Oracle Cloud 系列文章汇总:
本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.
42 条评论
我选择驻留方式,crontab定时运行。运行时,docker logs keeporaclealive 时什么都没有,要是能提示一下运行过的痕迹就好,哈!
这个arm服务器,运行了rustdesk、wordpress,npm,负载不知如何?现在搞这个keep alive,就怕原本没问题的,运行以后反而被oracle揪出来卡掉,:P
多虑了,好象oracle查不出来你在运行什么
arm机新增crontab -e定时任务 * docker start keeporaclealive,看到己执行,但没有启动,并docker ps 没显示
但amd机都是ubuntu用同方法能够自动执行,为什么呢?
刚在 Oracle Linux 7.9 的 ARM机器里试了下 crontab 没问题,能够正常启动.
那会是什么原因呢,明明AMD机可以~就ARM里的crontab不能,但手动又没问题,又能正常启动→_→
测试下 crontab 加其他的任务试试看能否成功.
也遇到了同样问题,没有启动。想请作者帮忙确认一下这个目录是什么意思/usr/local/bin。我的理解是,这条命令是先进入keeporaclealive文件夹,如果成功开始执行docker-compose up的命令。那我是不是应该不用加“docker-compose up”,而是改为:0 10 * cd /keeporaclealive && docker-compose up -d。谢谢
/usr/local/bin 是你的docker-compose绝对路径,你可以用find查一下在那
因crontab -e 里直接命令一定要用绝对路径才可生效,而我的在/snap/bin
所以是cd /root/keeporaclealive && /snap/bin/docker-compose up -d
成功了,crontab -e里原来要输入绝对路径才可,例如我的docker是在 /snap/bin/docker
就输入 * /snap/bin/docker start keeporaclealive完成
然后再输入service cron restart看看,是立即生效的
我估计你这个问题不是绝对路径问题。你应该先docker ps -a,找到keeporaclealive容器的id,然后
然后是docker start <容器id>,而不是容器名。
谢谢回复。那如何确认自己的docker的绝对路径呢?接触Linux不久,请多多赐教。谢谢。
find / -name docker-compose
find / -name docker
看你用方法一還是方法二
另外看你回复又是 docker start 又是 docker-compose ,不大清楚你到底是用哪种方式
我这里 crontab 执行 docker 没问题
如果你有问题,可能是我们的 docker 安装方式不行
docker-compose 更加不行,在 crontab 里需要用 /usr/local/bin/docker-compose up -d
所以你尝试下 /usr/local/bin/docker start keeporaclealive
另外你理解有误 docker start keeporaclealive 是启动容器.并没有用到 docker-compose, 也不存在什么 keeporaclealive 文件夹
試了一下,是可看到成功,
echo "test crontab is work or not" >> /var/tmp/testcrontab.txt就是docker不能docker start keeporaclealive
感谢,刚好有台韩国机,我还是设定后半夜自动运行吧
这得每天占用多久才能保呀
2小时差不多了
crontab 定时任务,每日 10 点启动,每日 14 点停止。 每天最低跑4个小时才能保号吗?
我随便举例的, 按照规则 5% 以上大约 1个半小时就够了。