对于大访问量的网站,上线代码时一般有两种方式:
- 直接覆盖代码目录
- 上传新代码目录,然后重新创建软连接
对于第一种方法,不好
对于第二种方法,切换软连接也可能会出现问题,尽管速度很快,测试方法:
在一个term中不断地查看a目录下的m文件(a是一个软连接,可能连接到a.1 或 a.2)
1 2 3 4 5 6 7 |
# ll a lrwxrwxrwx 1 root root 3 11月 10 15:27 a -> a.1 # cat a.1/m m in a.1 # cat a.2/m m in a.2 |
命令1:
1 |
while :; do cat a/m >/dev/null;done |
然后在另一个term中执行命令2:
1 |
unlink a && ln -s a.2 a |
我们发现命令1有一个出错;那么如果才能使得命令1不会感知到变化呢?
命令3:
1 |
#ln -s a.2 b && mv -T b a |
执行该命令并不会导致命令1出错,不是凑巧没出错吗?做个压力测试吧:
命令4:
1 |
i=1;while :; do [ $i = 1 ] && i=2 || i=1; ln -s a.$i b; mv -T b a; done |