Docker容器中的Postgresql备份脚本异常解决办法
创始人
2025-06-30 00:21:41
0

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

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...