本文基于K8S中Docker容器对postgres数据库进行备份的操作,编写好脚本后,手动执行脚本是正常的,但是crontab定时实行却报错,报错信息为kubectl command not found,提示没有找到kubectl指令 。
本文主要介绍对该报错信息的分析及其解决办法 。详细内容请参考下文 。
一、查看数据库环境1、获取数据库所在节点
文章插图
2、进入数据库对接节点容器
文章插图
二、编写数据库备份脚本1、执行指令# vim pgbackup.sh
#!/bin/bash#设置系统变量source /etc/profilefilename="`date +%F`_bak.sql"#备份数据脚本cat > /usr/local/backup/exportPG.sh <<EOF#!/bin/bashexport PGUSER=****export PGPASSword='******'export PGHOST=172.**.**.**export PGPORT=324**#备份整个集群库中的数据#pg_dumpall -a > ${filename}#备份整个集群库包含建库建表操作pg_dumpall > ${filename}EOF#给执行权限chmod +x /usr/local/backup/exportPG.sh#将服务器上的备份脚本复制到对应容器中去kubectl cp /usr/local/backup/exportPG.sh sso/********:/exportPG.sh#在容器外执行该脚本kubectl exec -it ******** -n sso -- /exportPG.sh#将备份后的数据文件复制到容器外kubectl cp sso/********:${filename} /usr/local/backup/${filename}
1.文章插图
【Docker容器中的Postgresql备份脚本异常解决办法】2、授予备份脚本执行权限
执行指令# chmod +x/usr/local/backup/pgbackup.sh
文章插图
3、测试数据库备份脚本
说明:测试数据库备份脚本,手动执行# sh pgbackup.sh的时候,备份正常 。但是在使用crontab执行任务定时执行的时候,报kubectl command not found的错误信息 。
4、分析定时执行的报错信息
说明:crontab执行计划任务的时候并不知道所需要的特殊环境变量 。所以要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量 。
特别需要注意如下三点:
(1)脚本中涉及文件路径时写全局路径;
比如:
上文所提到的数据备份脚本问题,就是kubectl指令没有写全路径,正确的做法是,通过执行指令# which kubectl查看指令kubectl的所在位置,让后将脚本的指令路径补全 。
文章插图
(2)脚本执行要用到程序或其他环境变量时,通过source命令引入环境变量;
比如:
在root的crontab文件中加入:
SHELL=/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin
(3)、如上文所述,当手动执行脚本正常,但是crontab定时执行报错的情况 。就是环境变量问题,可以在crontab中直接引入环境变量解决 。0 * * * * /etc/profile;/bin/bash /home/scripts/test.sh >/dev/null 2>&1
5、修改后的备份脚本
说明:执行指令# vim pgbackup.sh修改数据库备份脚本,修改后的脚本如下
文章插图
推荐阅读
- AI可以读取人心了 心中的小秘密还能藏多久?
- 容器技术架构、网络和生态详解
- 基于容器的微服务架构选型与设计
- 家庭生活中的饮食误区
- 天地六界指的哪六界
- 诗经中的男孩灵动名字兔宝宝 诗经中的男孩灵动名字
- 女生梦见自己怀孕了 恋爱中的女生梦见自己怀孕了
- 钓鱼饵料中的奇葩:4种糊糊饵料,最后这种被黑坑禁用
- 含糖饮料到底“多不健康”?如何换算饮料中的“糖”?
- 什么是计算机技术中的特征金字塔