在shell脚本中本地备份文件

在shell脚本中本地备份文件

这是我的 crontab:

crontab -e
30 5 * * * sh /home/donato/Documents/pg_bak.sh

每天早上 5:30 我想执行一个我创建的名为 pg_bak.sh 的 shell 脚本。

这是 shell 脚本的内容:

#!/bin/bash

PG_USER=donato
DATABASE=mydb
SERVER=216.58.219.174
DIR="$HOME/pg_bak"
DATE=$(date +"%m_%d_%y")
FILE="$DATABASE_$DATE"
# pass @ .pgpass

PG_BAK_NOW () {
  pg_dump -h $SERVER -U $PG_USER $DATABASE -f $FILE.sql  
}

echo "Ready to dump to $FILE" >> "$HOME/pg_status" 

cd $DIR
if [ -f "$FILE" ];
then
  rm $FILE
  PG_BAK_NOW 
else
  PG_BAK_NOW
fi

我想在本地计算机上的 ~/pg_bak 上备份 sql 文件,而不是在远程服务器上。换句话说,我不想备份远程服务器上的文件。 pg_dump 命令是否会在我从远程服务器运行它的计算机上下文中运行?

答案1

只需使用

pg_dump -h $SERVER -U $PG_USER $DATABASE > $FILE.sql 

将命令的结果输出到本地机器。您可能希望首先通过 gzip 或类似的方式对其进行管道传输,以获得较小的转储。

既然我已经在这里了,还有一些其他建议:

30 5 * * * /home/donato/Documents/pg_bak.sh

您不需要调用sh来运行脚本,只需为其提供所有者执行位即可。

紧随 echo 之后的脚本中的整个代码块可以更改为:

cd $DIR
rm $FILE 2>/dev/null
PG_BAK_NOW 

事实上,由于现在您pg_dump只调用一次,因此无需将其包装在函数中 - 只需直接调用即可。

相关内容