解决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的越长,开机的卡顿就越明显)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值