好几天没有写博客了,现在也很晚了一直要求自己要早睡可是总也做不到。不扯了说一件今天碰到的一个小问题,可能对高手来说都不是问题但是对于我这种刚接触linux而且也没什么老师就靠自己学的还真的就没什么小问题。还真的整整弄了1个多小时。事情的背景是这样的我最近在研究服务器的实时数据备份inotify+rsync经过这段时间可以说基本搞定了,看到好多地方都在说用sersync好像更好一些就下了一个配置了一下感觉还真的非常方便在命令行都设置启动/home/oldboy/tools/GNU-Linux-x86/sersync2 -r -d -o /home/oldboy/tools/GNU-Linux-x86/confxml.xml之后测试都没问题之后我就直接把这个命令拷贝到了/etc/rc.local(先交代一下我的/etc/rc.local 文件的内容#!/bin/sh
#
This script will be executed after all the other init scripts.
You can put your own initialization stuff in here if you don‘t
want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/init.d/rpcbind start
mount -t nfs 192.168.56.139:/data /nfs_192.168.56.139
#/home/oldboy/tools/GNU-Linux-x86/sersync2 -r -o /home/oldboy/tools/GNU-Linux-x86/confxml.xml
/bin/sersync2 -r -d -o /home/confxml.xml
)里边之后reboot在系统重新启动后在测试就不能同步了,不知道什么原因我的排错步骤是这样的:
第一步:我以为拷贝错了就把/etc/rc.local这里的拷贝在命令行上在测试就正常了证明没有拼写错误
第二步:我以为在/ect/rc.local中不能用太长的路径就这么操作的
ln -s /home/oldboy/tools/GNU-Linux-x86/sersync2 /bin/sersync2
ln -s /home/oldboy/tools/GNU-Linux-x86/confxml.xml /home/confxml.xml
在把/etc/rc.local中的内容改为sersync2 -r -d -o /home/confxml.xml
但还是失败了证明不是这个问题
第三部:我为了测试就在我的这条命令前后个加了一条就变成这样
/bin/touch /home/000
sersync2 -r -d -o /home/confxml.xml
/bin/touch /home/111
之后在重新启动发现在home目录下面没有000和111这两个文件证明都没有运行于是我就在看了上一条就是mount -t nfs 192.168.56.139:/data /nfs_192.168.56.139发现只要把这条注释掉那么就可以运行了证明这个/etc/rc.local不是没有运行我的配置文件,而是停止在了mount这里也就是说如果网络文件系统没有挂载上就一直等在那里因为我的网络文件系统的机器没开也就是说mount命令就能让系统的命令一直挂在那里后来我查了一下好像是说nfs系统默认挂载的是有个hard方式这个方式就是一直在那里尝试挂载所有后边的就不运行。
总结:
1、/etc/rc.local里边要运行的时候不是说你写了就肯定能运行它也其实就是一个运行的程序也很容易挂起来(就是停止在那里)
2、向mount这种(hard方式)东西最好是放在最后边这样就不影响其他的
我不知道说明白没有,反正我自己是有点感触。
还有一个问题如果把sersync的配置文件confxml.xml改的有语法错误了系统好像也是启动不了的,反正我改错了之后实验了一下就没能启动但是可以单用户模式进去之后把这个文件修复又恢复正常了。因为我改的时候多加了个逗号在重启就看那个启动界面就老停止在watch data:这个地方进度条也不往前走了所以我用单用户模式进去改了一下就可以了。(怀疑和这个有关系但是还不确定,反正大家改的时候尽量小心点吧)
原文地址:http://blog.51cto.com/13638458/2120470