这是我的 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
只调用一次,因此无需将其包装在函数中 - 只需直接调用即可。