背景,配置好了ssh 使用rsa pulbic key的方式登陸遠程服務器。//ssh-keygen -t rsa -b 2048 -f andy-rsync-key -P ''
https://help.ubuntu.com/community/SSH/OpenSSH/Keys
然后就有了本篇的主體,通過rsync來同步遠程和本地的數據。
本篇的拓展,開發一個手機app, 通過http協議調用 php(或其他語言寫的http接口), 實現自動化便捷控制。@todo
--------------------------------------------------------------------------------------------------------------------------------
rsync 用來同步兩台主機上的目錄(或文件)
/home/fly/ljl
rsync -chavzP --stats . 120.79.14.84:/fly/ljl/
-------------------------------------------------------------
反過來,也是一樣,把遠程的同步到本地機器:
rsync -chavzP --stats 120.79.14.84:/fly/ljl/* .
遠程---》本地, 本地----》遠程, 其實都是數據從左端-------》右端。(數據從左端流向右端, 從左端同步到右端)。
注意:同步的時候,如果左端有新增或修改的文件(目錄),右端也有新增的文件,左端的文件(新增或修改) 會同步到右端去, 右端上面新增的文件不會同步到左端, 右端上面修改的文件會被左端的覆蓋。
也就是說,同步之后,右端的文件以左端的文件為最新版本,會把左邊的文件全部拷貝到右邊。右邊自己已有的新文件不動。
實際傳輸
不加壓縮參數 -z 的話,
---------------------------------------------------------------------------------------
寫成php的自動同步腳本:
shell_exec()函數
rsync.php
<?php echo shell_exec("rsync -chavzP --stats . 120.79.14.84:/fly/ljl/");
//或者改用絕對路徑
//echo shell_exec("rsync -chavzP --stats /home/fly/ljl/ 120.79.14.84/fly/ljl");
運行一下這個 rsync.php文件就可以同步了。
php rsync.php
用反引號的方式:
<?php $m = `ls -al`; echo $m;
PHP supports one execution operator: backticks (``),Use of the backtick operator is identical to shell_exec().
-----------------------------------------------------------------------------------------------------------2018年12月11日-----------------
補充: rsync 可以使用不同的端口,並不要求兩台服務器的 ssh端口都一致
下面本機的ssh 端口是 3000, 而遠端的端口是 22