为什么使用crontab定时备份dockers安装的oracle 无法运行?(操作系统-linux)

步骤是首先在dockers容器内 写一个dump.sh的脚本。用于exp 数据库文件。然后在宿主机里新建一个oracle.sh脚本,用于调用容器内的dump.sh脚本 和 将容器内exp导出的dump文件复制到宿主机里,用crontab 设置定时调用oracle.sh文件。现在宿主机内的oracle.sh手动是可以运行的,crontab也可以看出是定时运行。但是目录里就是没有最新的dump文件

img

img

img

定时备份Docker容器内Oracle失败的原因可能有以下几个:

  1. Docker容器内的Oracle实例无法被定时任务访问。定时任务是在宿主机上运行的,默认情况下无法访问Docker容器内的服务和资源。需要在启动Docker容器时使用--privileged=true选项,或映射宿主机和容器内的Oracle数据目录实现访问。

  2. cron任务的用户没有权限访问Docker或相关目录。定时任务如果使用root用户则一般没有这个问题,但如果使用普通用户需要确保用户有访问Docker和相关文件的权限。这可能需要进行用户组设置或权限修改。

  3. 脚本语法错误或定时任务设置错误。需要检查oracle.sh脚本是否可以正确调用容器内脚本以及传输文件,也需要检查crontab的配置语法和时间设置是否正确。cron的时间设置容易出错,建议使用crontab -e命令修改而不是直接编辑crontab文件。

  4. 网络问题导致Docker容器或Oracle实例无法访问。如果策略设置不当,可能会造成定时任务、Docker和Oracle之间的网络访问出现问题,这也会导致备份失败。

  5. Docker容器或Oracle数据目录满了。如果硬盘空间满了则会无法正常写文件,导致备份失败。需检查磁盘使用空间以及数据目录的可用空间。

所以,排查定时备份Dockers Oracle失败的步骤可以是:

  1. 检查Docker容器的--privileged和目录映射设置,确保定时任务可以访问容器服务和文件
  2. 检查定时任务的用户和权限,确保可以访问相关目录和文件
  3. 检查定时任务的脚本语法和时间设置是否正确
  4. 检查相关系统之间的网络连接性并确保网络访问策略正确
  5. 检查磁盘空间和相关数据目录的可用空间