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