Centos7 rc.loca添加自启动不生效的问题

Centos7 rc.loca添加自启动不生效的问题

背景:
我自己写了一个mongodb启动的shell脚本startMongoDB.sh
cat /opt/mongodb/bin/startMongoDB.sh #内容如下

/#!/bin/bash

mongod --config /opt/mongodb/mongodb.conf

然后在/etc/rc.d/rc.local中添加了启动项(如果是Unbuntu系统,则自己在/etc/init.d/目录下创建自启动脚本)

重启后发现无法启动,脚本内容如下:

# cat /etc/rc.d/rc.local

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

/opt/mongodb/bin/startMongoDB.sh

尝试逐步排查下列可能导致启动失败的情况

rc.loca权限是否满足
# ls -l /etc/rc.d/rc.local 
-rw-r--r--. 1 root root 523 Jun 11 00:45 /etc/rc.d/rc.local

如果没有执行权限,需要增加执行权限
# chmod u+x rc.local 
-rwxr--r--. 1 root root 523 Jun 11 00:45 rc.local

reboot发现重启仍然没有生效

查看系统日志看能否找到错误信息
cat /var/log/message | grep rc.local
找到相关错误信息
Jun 11 02:56:36 localhost systemd: Starting /etc/rc.d/rc.local Compatibility...
Jun 11 02:56:36 localhost rc.local: /opt/mongodb/bin/startMongo.sh: line 3: mongod: command not found
Jun 11 02:56:36 localhost systemd: rc-local.service: control process exited, code=exited status=127

原因找到了,日志提示 mongod 命令无法识别。
修改startMongo.sh脚本,启动命令mongod改为使用绝对路径“/opt/mongodb/bin/mongod”
vi /opt/mongodb/bin/startMongoDB.sh

/#!/bin/bash

/opt/mongodb/bin/mongod --config /opt/mongodb/mongodb.conf

reboot重启,问题解决。
 

注意:rc.local 运行在操作系统完全引导成功、但尚未启动login shell之前。所以我们配置在 /etc/profiles 或 bashrc 里的环境变量并未得到执行、还未生效,因此,在 rc.local 执行阶段看不到任何环境变量。有些时候添加的自启动命令不生效,可能是该原因导致,如果在 rc.local 中添加的自启动命令对环境变量有依赖的话,可能会因为环境变量未生效而导致自启动失败。

解决办法:在 rc.local 中在执行启动命令之前加上 export 环境变量设置。或者启动命令做到避免依赖环境变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值