[实践OK]解决linux下/etc/rc.local开机器不执行的原因。linux下rc.local中的服务开启失败分析~

jackxiang 2016-2-17 10:59 | |
背景:像webserver啥的开机启动其他程序的shell脚本,链接:https://jackxiang.com/post/7433/ 里写到:  /etc/rc.d/rc.local ,而后做了软连接,/etc/rc.local -> rc.d/rc.local,而这样久后,就以为写在/etc/rc.local就成了,导致开机还真没启动,得注意这个问题。
方法一:
直接建立新文件之后,建立软链接,source文件一定得放在/etc/rc.d里面。
1)vi /etc/rc.d/rc.local
2)ln  软链接,ln [options] source dist, cd /etc ;ln -s  rc.d/rc.local  /etc/rc.local    ==>形成: /etc/rc.local -> rc.d/rc.local  


方法二:
更标准一些,根据开机启动级别是3进行配置(/etc/rc.d/rc3.d 里面去指向/etc/rc.local也行,总之得有一个在/etc/rc.local里自启动才行)
操作如下:

引用:
到后来,有几台服务器突然被重启了,这时候领导问,怎么开机启动的脚本没起作用,还被批了一顿,哎,做事虎头蛇尾,活该!
然后去查,一直没查到原因,
手动执行都是正确的,在排除了权限原因和脚本问题后,很郁闷,怎么放到开机启动项目中就无法执行了呢。
于是去查linux开机启动过程信息。google下,看了下关于一些开机启动启的资料,发现了开机启动程序的级别为3.
果断顺藤莫瓜,找到了这个目录 /etc/rc.d/rc3.d,进去一看恍然大悟。

我的rc.local文件是在 /etc/rc.local中(网上都是说写在这里,我是按照网上来弄的),
而我查看了系统指向rc.local文件的路径是 /etc/rc.d/rc.local,
后来把开机启动的脚本配置到/etc/rc.d/rc.local中(或者把S99local指向 /etc/rc.local也行),重启检查,成功!

总结:主要还是对linux系统不熟悉,这是个漫长的过程,有时间得多看看这方面的书籍。

法二来自:http://www.cnblogs.com/montya/archive/2011/09/09/2172001.html



linux下rc.local中的服务开启失败分析:
linux下可以在rc.local中设置开机启动任务。开机时,系统会根据 /etc/inittab中设置的运行级别,开启/etc/rc.d下相应的服务。如多用户启模式为3,则系统会开启/etc/rc.d/rc3.d/下的服务。

/etc/rc.d/rc3.d/的目录列表:

20140323164552

其中K表示需关闭的服务,S表示开启服务,后面的数据表示关闭或开启的顺序。/etc/rc.d/rc3.d/下的服务一般通过软连接,指向到/etc/init.d中。


S99local一般会通过软链接指到/etc/rc.d/rc.local

ls -al /etc/rc.d/rc3.d/S99local
lrwxrwxrwx. 1 root root 11 Dec 17 2012 /etc/rc.d/rc3.d/S99local ->../rc.local
ls -al /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 17 2012 /etc/rc.local -> rc.d/rc.local
ls -al /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 149 Mar 21 13:17 /etc/rc.d/rc.local

如果在rc.local中添加了服务,但开机时未能所开启。则可以通过方排查:
1. 根据运行级别查看rc.local文件链接指是否正确。
2. rc.local文件有没执行限制,导致执行失败,给 chmod +x 给 rc.local添加执行权限。
3. 查看/var/log/boot.log有没报错信息,是不是执行出错了, rc.local中的服务要写 sheel命令的绝对路径, 如Erlang服务,不能直接写 erl,需添加绝对路径/usr/local/bin/erl。
4. 因为rc.local是等待 /etc/init.d的服务都开启后才执行的,所以如果/etc/init.d中的服务未开启完成,rc.local是不会执行的。如启动了firstboot服务,将会导致多用户模式下rc.local不能执行, 可通过 chkconfig –del 把 firstboot服务去除。服务开启时都会写启动日志,可通过/var/log/boot.log查看服务启动与否,再结合/etc/rc.d/rcx.d/下服务启动顺序排查哪些服务阻塞了。可结合 ps awux | grep ServerName 一起排查。

From:http://www.kongqingquan.com/archives/152

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/8510/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2017-7-2 01:26
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]