龙空技术网

Docker容器中的Postgresql备份脚本异常解决办法

JasonTang 120

前言:

眼前兄弟们对“电脑出现脚本错误怎样修改文件”都比较重视,同学们都想要学习一些“电脑出现脚本错误怎样修改文件”的相关资讯。那么小编在网摘上收集了一些对于“电脑出现脚本错误怎样修改文件””的相关知识,希望大家能喜欢,小伙伴们快快来了解一下吧!

简介:本文基于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修改数据库备份脚本,修改后的脚本如下

标签: #电脑出现脚本错误怎样修改文件