我正在创建一个 php 脚本来每天备份我的网站,备份到我的另一个 linux 服务器,但是我如何压缩所有文件并通过脚本发送到另一个 linux 服务器?
问问题
343 次
2 回答
3
一种可能的解决方案(在 bash 中)。
BACKUP_SERVER_PATH=remote_user@remote_server:/remote/backup/path/
SITE_ROOT=/path/to/your/site/
cd "$SITE_ROOT"
now=$(date +%Y%m%d%H%M)
tar -cvzf /tmp/yoursite.$now.tar.gz .
scp /tmp/yoursite.$now.tar.gz "$BACKUP_SERVER_PATH"
一些额外的东西要考虑到权限(对 docroot 的读取访问)和对远程服务器的 ssh 访问(对于 scp)。
请注意,确实有很多方法可以做到这一点。另一种方法是,如果您不介意存储站点的未压缩版本,则可以使用 rsync。
于 2012-05-11T01:56:54.520 回答
1
Timothée Groleau 提供的答案应该有效,但我更喜欢反过来:从我的备份机器(一个有大量可用存储空间的服务器)启动一个进程来备份所有其他服务器。
在我的环境中,我使用列出所有服务器、每个服务器的有效用户和备份路径的配置文件:
/usr/local/etc/backupservers.conf
192.168.44.34 userfoo /var/www/foosites
192.168.44.35 userbar /var/www/barsites
/usr/local/sbin/backupservers
#!/bin/sh
CONFFILE=/usr/local/etc/backupservers.conf
SSH=`which ssh`
if [ ! -r "$CONFFILE" ]
then
echo "$CONFFILE not readable" >&2
exit 1
fi
if [ ! -w "/var/backups" ]
then
echo "/var/backups is not writable" >&2
exit 1
fi
while read host user path
do
file="/var/backups/`date +%Y-%m-%d`.$host.$user.tar.bz2"
touch $file
chmod 600 $file
ssh $user@$host tar jc $path > $file
done
要使其正常工作并且无需为要备份的每台服务器输入密码,您需要交换 SSH 密钥(关于如何执行此操作,stackoverflow 上有很多问题/答案)。
最后一步是将其添加到 cron 以每晚启动该过程:
/etc/crontab
0 2 * * * backupuser /usr/local/sbin/backupservers
于 2012-05-11T08:04:55.013 回答