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

本文基于K8S中Docker容器对postgres数据库进行备份的操作,编写好脚本后,手动执行脚本是正常的,但是crontab定时实行却报错,报错信息为kubectl command not found,提示没有找到kubectl指令。

本文主要介绍对该报错信息的分析及其解决办法。详细内容请参考下文。

一、查看数据库环境

1、获取数据库所在节点

2、进入数据库对接节点容器

二、编写数据库备份脚本

1、执行指令# vim pgbackup.sh

bash 复制代码
#!/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、授予备份脚本执行权限

bash 复制代码
执行指令# 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文件中加入:

ruby 复制代码
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修改数据库备份脚本,修改后的脚本如下

三、开发工具

JNPF,很多人都用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

原理是将开发过程中某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。因而极大的提高了程序员的生产效率。

官网:www.jnpfsoft.com/?juejin ,如果你有闲暇时间,可以做个知识拓展。

这是一个基于Java Boot/.Net Core构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的Demo方便直接使用;后端框架支持Vue2、Vue3。

为了支撑更高技术要求的应用开发,从数据库建模、Web API构建到页面设计,与传统软件开发几乎没有差异,只是通过低代码可视化模式,减少了构建"增删改查"功能的重复劳动。

支持连接多数据源,帮助应用快速与第三方系统完成数据整合,将第三方系统数据整合在平台里。包括主流数据库SQL Server、MySQL、Oracle、PostgreSQL,同时兼容国产数据库达梦、人大金仓等。

相关推荐
agilearchitect2 小时前
asyncpg:专为 asyncio 打造的 PostgreSQL 驱动
数据库·其他·postgresql
IvorySQL3 小时前
PostgreSQL 技术日报 (6月10日)|多工具版本更新,PG19 图语法落地
数据库·postgresql
杨浦老苏3 小时前
PDF文档管理平台PDFManager
docker·pdf·工具·群晖
ai产品老杨3 小时前
解耦异构安防:基于 Docker 与边缘计算的 AI 视频管理平台,如何实现 GB28181/RTSP 统一接入与全源码交付
人工智能·docker·边缘计算
IvorySQL4 小时前
PostgreSQL 全球对话:开源链接世界,共建共治共享
数据库·postgresql·开源
极客先躯5 小时前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme5 小时前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
想要成为计算机高手5 小时前
用meta quest 3 遥操宇树机器人-xr_teleoperate 复现(含docker安装与配置方式)
人工智能·docker·机器人·xr·g1·具身智能
“码”力全开6 小时前
云边端协同架构:基于 Docker 与边缘计算的 GB28181/RTSP 异构视频 AI 管理平台设计(附源码交付)
人工智能·docker·架构
IvorySQL6 小时前
PostgreSQL 技术日报 (6月11日)|规划器扩展优化,POSETTE 大会倒计时
数据库·postgresql