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

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
如何使用expect自动输入密码?

1 前言 一个问题,一篇文章,一出故事。 笔者最近在一个脚本中使用“adcli passwd-use …

Bash
如何实现SFTP自动上传下载?

1 前言 一个问题,一篇文章,一出故事。 笔者最近需要实现sftp自动上传下载,于是整理此文。 以下 …

Bash
如何实现Base Shell根据关键字获取数组?

1 前言 一个问题,一篇文章,一出故事。 笔者最近写一个Shell发现同一个脚本需要引用两个以上AD …