如何通过脚本将一组文件/文件夹从linux服务器传输到另一个?

时间:2012-05-11 01:22:31

标签: php web-services ftp ssh

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

TimothéeGroauau提供的答案应该可行,但我更喜欢这样做:从我的备份机器(具有大量存储空间的服务器)启动一个备份所有其他服务器的过程。

在我的环境中,我使用的配置文件列出了所有服务器,每个服务器的有效用户以及备份路径:

/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