如何使用计划任务操作容器?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者今天需要根据一定的条件删除容器里面的过期文件,但由于容器没有计划任务,于是笔者通过宿主机的计划任务触发脚本去操作容器的文件内容,于是产生本文。

2 最佳实践

2.1 创建监视脚本

mkdir -p ~/scripts/
vim ~/scripts/rmTmpFile.sh

加入如下脚本,

#!/bin/bash

containerIDs=`docker container ls | grep 'container name' | cut -d" " -f1`
cmd='find /tmp -type f \( -name \*.py -o  -name \*.csv \) -cmin +120 -exec rm -f {} \;'
cmd='find /tmp -type f \( -name \*.py -o  -name \*.csv \) -cmin +120 -exec ls -l {} \;'


for i in $containerIDs; do
        containerID="$i"
        if [ "$containerID" == "" ]; then
                continue
        fi
        docker exec --user root "$containerID" /bin/bash -c "$cmd"
done

脚本解析,
– 变量“containerIDs”定义筛选出的多个容器ID列表的命令行,“container name”为搜索容器的关键字
– 变量“cmd”定义容器内部的执行具体命令(范例中有两个定义,最后一条生效)
– 命令“find”找出120分钟之前且后缀名为“py”或“csv”的文件
– 命令“find”中的“exec”参数定义需要执行的操作命令
– 参数“exec”中“rm”用于删除“find”传递过来的变量“{}”的内容,而“ls”只列出,需要删除请调整命令顺序
– 循环“for”迭代找到的每一个容器ID
– 判断“if”遇到变量“containerID”即容器ID为空时跳过后面的操作,即不执行命令“docker exec”
– 命令“docker exec”根据得到的容器ID以“root”身份身份进入容器并执行变量“cmd”定义的命令

2.4 测试脚本

sh ~/scripts/rmTmpFile.sh

2.5 设置脚本触发

crontab -e

加入如下触发规则,

*/5 * * * * sh ~/scripts/rmTmpFile.sh
没有评论

发表评论

Bash
如何清理NextCloud过期账号?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境的NextCloud有用户离职后重新入职后发现 …

Bash
如何命令查找docker集群实例关键字?

1 前言 一个问题,一篇文章,一出故事。 笔者定位某个IP地址在集群中的位置,于是笔者想到使用循环去 …

Bash
如何实现主从存储目录镜像?

1 理论部分 1.1 工具的介绍 Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各 …