Syncthing官网:https://syncthing.net/
安装Syncthing
cd /home
wget https://github.com/syncthing/syncthing/releases/download/v1.3.3/syncthing-linux-amd64-v1.3.3.tar.gz
#解压
tar -zxvf syncthing-linux-amd64-v1.3.3.tar.gz
#进入解压目录将syncthing程序复制到/usr/local/bin目录
cd syncthing-linux-amd64-v1.3.3
cp syncthing /usr/local/bin/
运行
运行一次syncting让它自动生成一个配置文件,然后ctrl+c结束程序
#启动syncthing命令
syncthing -no-browser
修改配置文件
vi ~/.config/syncthing/config.xml
将127.0.0.1:8384
修改为0.0.0.0:8384
这样外网就能访问了
非root账号设置方式
这里以www
用户为例
- 拷贝配置文件
将/root/.config/syncthing
文件夹拷贝至/home/www/.config/syncthing
mkdir -p /home/www/.config/syncthing
cp -r /root/.config/syncthing/* /home/www/.config/syncthing
- 赋予配置目录权限
chown -R www:www /home/www/.config/
注意:这里是以www账户为例,如果你的是其他用户,那么相应的,你要创建一个/home/你的用户名/.config/syncthing
这样的文件夹,然后存放配置文件在里面。如果你的配置路径不是/home/你的用户名/.config/syncthing
这样的格式,那么启动时需要添加--home
参数来指定配置所在的路径。
设置后台启动
CentOS7 按如下方式设置:
#从源包内复制
cp /home/syncthing-linux-amd64-v1.3.3/etc/linux-systemd/system/syncthing@.service /usr/lib/systemd/system
#修改文件名(如果不是用root账户启动,需要将root改为你的用户名)
mv /usr/lib/systemd/system/syncthing@.service /usr/lib/systemd/system/syncthing@root.service
#修改syncthing@root.service文件中的syncthing路径
vi /usr/lib/systemd/system/syncthing@root.service
#将ExecStart=/usr/bin/syncthing改为:ExecStart=/usr/local/bin/syncthing
#如果你的是非root用户启动且配置路径不是/home/你的用户名/.config/syncthing这样的格式,那么需要添加--home参数,例如:ExecStart=/usr/local/bin/syncthing serve --no-browser --no-restart --logflags=0 --home="你的配置路径"
#添加开机启动
systemctl enable syncthing@root.service
#启动syncthing服务
systemctl start syncthing@root.service
启动后,检查syncthing服务状态:
systemctl status syncthing@root.service
CentOS6 设置方式:
第一种方式:
nohup syncthing &
第二种方式(推荐):
安装Supervisor
略。详情查看:http://www.884358.com/centos-supervisor/
在/etc/supervisor/conf.d/
目录下新建syncthing.conf
:
vi /etc/supervisor/conf.d/syncthing.conf
内容如下:
[program:syncthing]
environment = STNORESTART="1", HOME="/root"
directory = /root/
command=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0 -home="/root/.config/syncthing"
autostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_logfile=/var/log/syncthing.log
然后启动supervisord
supervisord
或者重启supervisord
supervisorctl reload
停止同步则使用命令:supervisorctl stop syncthing
(syncthing也就是supervisord.conf配置文件中这一部分内容[program:syncthing
])
Windows服务器
借助NSSM工具安装为系统服务,参数填写:
--no-restart --no-browser --no-upgrade --home="C:\Users\你的用户名\AppData\Local\Syncthing"
设置防火墙
#开启8384,22000,21027端口,其中21027是udp类型
firewall-cmd --zone=public --add-port=8384/tcp --add-port=22000/tcp --add-port=21027/udp --permanent
#重启防火墙
firewall-cmd --reload
#如果是阿里云、腾讯云等服务器上操作,还需要在安全组中添加
#更多Firewall防火墙操作看 https://www.5yun.org/10074.html
排除不需要同步的文件夹
例如共享文件夹下有一个cache目录,这个目录不需要同步,那么只需要在忽略模式中输入:/cache
即可
单向同步
syncthing设置好后,默认是双向同步的,即一方服务器的共享文件夹发生变动后,其他的共享文件夹也会跟着发生改变。如果只需要单向同步,可以在共享文件夹的高级选项中,设置文件夹类型为仅接收
。
例如A服务器和B服务器进行同步,我们只需要A发生的改动同步到B,而不希望B发生的改动同步到A,那么只需要设置B的件夹类型为仅接收
。
设置同步间隔时间
syncthing设置好后,默认是10秒同步一次,即当一台服务器新增文件后,至少需要10秒以上的时间才能同步到其他的设备。如果你希望减少这个时间间隔,可以在操作
->高级
中设置。
在高级配置中,选择要设置的共享文件夹,设置Fs Watcher Delay (seconds)
这个值即可。
忽略删除
如果A和B两台服务器建立了同步关系,如果希望A删除文件后,B服务器不删除该文件,那么可以在B服务器的高级设置中,找到文件夹选项,勾选Ignore Delete
即可
查看日志
默认是在/var/log/syncthing.log
常见错误
failed to setup inotify handler
解决办法:https://docs.syncthing.net/users/faq.html#inotify-limits
echo "fs.inotify.max_user_watches=204800" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# 使其立即生效
echo 204800 | sudo tee /proc/sys/fs/inotify/max_user_watches
参考
http://www.centphp.com/view/159
https://www.moewah.com/archives/1127.html
https://docs.syncthing.net/users/autostart.html