-1

我正在创建一个 php 脚本来每天备份我的网站,备份到我的另一个 linux 服务器,但是我如何压缩所有文件并通过脚本发送到另一个 linux 服务器?

4

2 回答 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 回答