Docker容器中的Postgresql备份脚本异常解决
作者:胖头鱼不吃鱼-
本文基于K8S中Docker容器对postgres数据库进行备份的操作,编写好脚本后,手动执行脚本是正常的,但是crontab定时实行却报错,报错信息为kubectl command not found,提示没有找到kubectl指令。
本文主要介绍对该报错信息的分析及其解决办法。详细内容请参考下文。
一、查看数据库环境
1、获取数据库所在节点
2、进入数据库对接节点容器
二、编写数据库备份脚本
1、执行指令# vim pgbackup.sh
#!/bin/bash #设置系统变量 source /etc/profile filename="`date +%F`_bak.sql" #备份数据脚本 cat > /usr/local/backup/exportPG.sh <<EOF #!/bin/bash export 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}
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/sh PATH=/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修改数据库备份脚本,修改后的脚本如下
到此这篇关于Docker容器中的Postgresql备份脚本异常解决的文章就介绍到这了,更多相关Docker Postgresql备份脚本异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!