我制作了一个脚本,当实例所有者手动运行它时,它可以成功执行在线备份。脚本如下(最初是两行)。
#!/bin/bash
/opt/ibm/db2/V9.7/bin/db2 backup database maxdb71 online to "/data/archiveBackup"
WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 INCLUDE LOGS WITHOUT PROMPTING;
正如我所说,当我由实例所有者手动执行它时,它可以工作。我把它放在实例所有者 crontab 中。
crontab -l
列出此脚本,并且服务器上的日期/时间是可以的。
为什么脚本在手动运行时运行正常时不执行在线备份?
谢谢
您的脚本从命令行运行但从 cron 失败的原因很可能是您的 DB2 环境已经为交互式会话初始化(即通过您的 .profile),而当由
cron
.这是一个建议的修改:
几点评论:
如果您通过 cron 为实例所有者执行它,这将起作用。但是,因为它取决于
$HOME
环境变量,如果您想通过 cron 以不同的用户身份运行它,则需要使用实例所有者主目录的实际路径。您不应该在 中引用二进制文件
/opt/ibm/db2/...
,而应该使用 DB2 实例中的二进制文件。因为脚本从 初始化环境db2profile
,所以db2
命令将在脚本的$PATH
.我从您的备份命令中删除了一些选项,因为这些不是必需的。DB2 在为这些选择运行时值时非常聪明,因此如果您覆盖默认值,您可能会得到更差的备份性能。
从 cron 执行脚本时,请确保将输出捕获到日志文件中。这对于调试目的非常有用。示例 crontab:
00 23 * * * /path/to/script/backup.sh > /path/to/script/backup.log 2>&1