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

开发
crontab定时实行却报错,报错信息为kubectl command not found,提示没有找到kubectl指令。本文主要介绍对该报错信息的分析及其解决办法。

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

责任编辑:张燕妮 来源: 今日头条
相关推荐

2009-12-07 18:38:16

WCF异常

2012-11-12 11:33:06

路由器组网H3C

2015-03-09 15:41:08

MongoDB查询超时异常Socket Time

2013-03-01 15:25:56

路由器网络设备故障备分设备数据

2024-10-07 08:26:05

编程Python异常处理

2024-01-04 16:27:16

2012-03-14 10:58:27

Java

2009-06-03 16:41:21

Eclipse乱码Eclipse

2011-03-04 13:07:47

Filezilla

2011-01-19 17:54:48

2009-05-31 09:07:35

Oracle锁定

2011-06-17 11:10:51

Qt 中文 输出

2010-01-15 09:38:08

磁盘被写保护解决办法

2017-05-04 20:15:51

iOSNSTimer循环引用

2009-02-18 09:30:10

AJAX跨域XML

2020-05-09 10:59:33

git cloneLinux文件

2015-01-04 13:56:44

DockerPostgreSQL

2020-12-25 19:16:03

C++编程语言

2015-08-26 15:11:41

Docker容器备份Docker容器迁移

2009-11-30 10:55:16

PHP页面乱码
点赞
收藏

51CTO技术栈公众号