PostgreSQL 自动备份脚本的疑问,无法输出日志

这个脚本,在 su - postgres用户下,无法输出日志,却可以正常备份数据库。
而在root用户下,可以输出日志,但是却不能正常备份数据库。

现在我只想解决,如何在su - postgres可以正常输出日志,请问有谁能帮我优化一下脚本,
或者告诉我具体的操作方法,使用这个脚本,如何才能正确的输出日志,又可以备份数据库,谢谢。


#!/bin/bash
# Configuration(现在目标文件夹创建好pgsql和log文件夹给与权限)
BACKUP_DIR="/mnt/pgbak"
DB_USER="postgres"
DB_NAME="davinci"
LOG_FILE="/mnt/1.log"
 
# Error handling
set -e
if [ ! -d "$BACKUP_DIR" ]; then
        echo "Error: Backup directory $BACKUP_DIR does not exist."
            exit 1
fi
 
# Redirect output to log file
exec >> "$LOG_FILE" 2>&1
 
# Generate filename
NOW=$(date +"%Y-%m-%d_%H:%M:%S")
FILE="$BACKUP_DIR/$NOW.sql.gz"
 
# Backup database
pg_dump -U $DB_USER -d $DB_NAME |gzip > "$FILE" 
 
# Set file permissions
chmod 600 "$FILE"
 
# Delete backups older than 7 days
find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;

给你一个新脚本 其实只需要使用chmod 755 给文件权限再将备份的日志输出到一个文件就可

#!/bin/bash
start1(){
cat <<EOF
   1.PGPASSWORD=${} pg_dump -h 10.0.0.134 -U postgres -p 5432 -d zabbix | gzip > /opt/zabbix20210108.sql.gz
EOF
}
start2() {
#PGHOME=/workspace/postgresql # PostgreSQL安装目录
      PGHOST=10.0.0.190            # Host
      PGPORT=5432                      # 监听端口
      PGUSER=postgres                # 用户
      passwd_pg=12123321           # 密码
      dbname="zabbix postgres"     # 数据库
      TIME_NAME=`date +%F%H%M`     #时间
      pg_dir="/home/gegewu/pgbak/" #数据备份目录
      pgbak_file="/home/gegewu/pgbak/pgbak.log"
      #localhost_passwd="123456"
      echo "开始备份数据库"
if [ ! -d ${pg_dir} ];then
      mkdir -p ${pg_dir}
      chmod 777 ${pg_dir}  # echo ${localhost_passwd} |sudo -S 
   else
      echo "目录已存在"
fi
      [ -f "${pgbak_file}" ] || touch ${pgbak_file}
     chmod 777 ${pgbak_file}      #  echo ${localhost_passwd} |sudo -S 
for zznn in ${dbname};do
     PGPASSWORD="${passwd_pg}" pg_dump -h ${PGHOST} -U ${PGUSER} -p ${PGPORT} -d ${zznn} | gzip > ${pg_dir}${zznn}_${TIME_NAME}.sql.gz
     echo "执行脚本$0时间:${TIME_NAME}"  >> ${pgbak_file} 2>&1
#PGPASSWORD=123456 psql -h 10.0.0.190 -p 5432 -d zabbix -U postgres < mydb-20211203142616.bak
done
}
start3() {
      echo "删除旧备份 开始执行"
      find ${pg_dir} -type f -mtime +5 |xargs rm -f
}
main() {
    start1
    start2
    start3
}
main

在su - postgres用户下无法输出日志的问题可能是由于权限不足导致的。你可以尝试使用以下方法解决这个问题:

确保log文件夹对postgres用户有写入权限:
执行以下命令来更改文件夹的所有者和权限:

chown postgres:postgres /mnt/log
chmod 755 /mnt/log
修改脚本,显式指定日志文件的路径,并设置其权限:
将LOG_FILE="/mnt/1.log"修改为LOG_FILE="/mnt/log/1.log",然后执行以下命令:

touch /mnt/log/1.log
chown postgres:postgres /mnt/log/1.log
chmod 644 /mnt/log/1.log
在脚本中切换到postgres用户并执行备份操作:
在备份数据库之前,添加以下代码切换到postgres用户:

su - postgres -c "

Backup database

pg_dump -U $DB_USER -d $DB_NAME | gzip > "$FILE"
"
确保postgres用户对数据库具有足够的权限:
可以通过在pg_hba.conf配置文件中更改访问权限来确认。确保在该文件中允许postgres用户使用trust认证方式或者其他适当的认证方式访问数据库。

请注意,在以上步骤完成之后,使用su - postgres用户执行脚本时,日志应该能够正确输出,并且数据库备份也能正常进行。