好几天没有写博客了, 现在也很晚了一直要求自己要早睡可是总也做不到. 不扯了说一件今天碰到的一个小问题, 可能对高手来说都不是问题但是对于我这种刚接触 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://www.bubuko.com/infodetail-2617877.html