解决Ubuntu开机启动项rc.local不工作的问题

整个过程异常困难,还好最后成功了。

首先尝试了在/etc/init.d下新建自己的脚本,然后加权限【sudo chmod +x 脚本】,接下来配置开机启动【sudo update-rc.d 脚本 defaults】。按理说这样就OK了,但是此处可能会看到一个missing LSB tag的错误,可以选择忽视掉,解决办法之一是非常粗暴的删除insserv这个东西(用apt删),另一种办法是添加他要的那个LSB tag. 具体格式参见【man insserv】,总之就是一堆注释。如果想修改脚本的话,记得先用【sudo update-rc.d -f 脚本 remove】将脚本从启动项中删除.

然而这样改了,开机之后照样没有启动。之后又尝试了网上的一堆解决方案。

#!/bin/sh的问题,有的博客说/bin/sh连接到了dash而不是bash,所以需要修改第一行为#!/bin/bash。但是改了之后也不好使。

runlevel的问题,改了半天重启无数次也没看见有什么效果…

环境变量的问题,我的脚本都是绝对路径,不存在这个问题。

而后又切换到/etc/rc.local和/etc/init.d/rc.local上,通过查看代码可以看出/etc/init.d/rc.local执行了/etc/rc.local,而rc.local这个东西也没有什么runlevel的问题,于是在修改了第一行的前提下,尝试将脚本写到这里面。重启,仍然失效。

最后发现了某位博主的神奇方法,在所有命令之前加一行sleep 1或者sleep 3或者更长。原博主给出的解释是:【rc.local默认的执行用户是root,权限也是。killall -QUIT uwsgi是异步的,中间要sleep 1,歇一秒,不然直接start会继续被杀掉。】翻译过来就是,rc.local脚本在执行期间,很有可能遇到QUIT信号什么的,在这个期间如果程序还在执行就会退出。所以要sleep来躲掉这个信号。

对于这个解释我也是醉了… 不过确实是奏效的. 然而副作用也很明显,在开机的过程中能明显的看出停顿(因为sleep了,这里sleep的越长,开机的卡顿就越明显)

你可能感兴趣的:(解决Ubuntu开机启动项rc.local不工作的问题)