给postgresql 数据库做备份,
在shell脚本中利用pg_dump命 令来备份整库,
在postgresql用户下,挂载crontab,如下:
PATH=/home/postgres/.local/bin:/home/postgres/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/pgsql/bin
17 11 * * * /home/dbbackup/shell/backupdb_sh.sh >> /home/dbbackup/shell/dbbackuplog.log 2>&1 &
执行时报错如下:
然后分析问题,
1、是不是系统自 动调用时,不是用postgres用户执行的该脚本,国类pg_dump命令是属于postgres用户的命令
如是在脚本中添加打印当前用户的命令如下:
执行后,查看日志,发现用户是postgres用户没错,如下图:
2、会不会是环境变量没生效?
于是在crontab -e中 去source postgres环境变量,crontab改成如下:
17 11 * * * source ~/.bashrc && /home/dbbackup/shell/backupdb_sh.sh >> /home/dbbackup/shell/dbbackuplog.log 2>&1 &
结果还是报错
3、会不会环境变量有问题?
postgres 用户下,cat ~/.bashrc ,里边没有postgresql的环境变量,如下图:
那么环境变量是不是在profile文件中,于是cat ~/.bash_profile,果然如此:
于是crontabl 命令改成如下:
17 11 * * * source ~/.bash_profile && /home/dbbackup/shell/backupdb_sh.sh >> /home/dbbackup/shell/dbbackuplog.log 2>&1 &
再执行,成功了!
这只是个例子,其他命令的执行也可以参考。