Linux系统中关于/etc/rc.d/rc.local中部分命令不执行的问题

最近遇到了个奇怪的问题。费了一番周折才最终解决。在此给遇到类似问题的同学提供一条思路。

在Linux系统中我们有可能需要某些命令在系统启动的时候自动运行。此时我们会想到利用文件:/etc/rc.d/rc.local

按照正常逻辑,只需要将相应的shell命令写入该文件,下次系统启动就会自动执行这些命令。然而事情往往没有这么顺利。

大部分人遇到的问题是rc.local里面的命令都不执行。这个通常是因为没有赋予该文件可执行权限。一条命令'chmod +x /etc/rc.d/rc.local'就可以解决问题。

而这次我遇到的问题是rc.local文件里面部分命令运行了,部分(httpd -k start)没有运行。引起这个问题的是多种原因。下面列举两个:

1. 命令没有使用绝对路径。

2. SELinux阻止了该命令的运行。

第一中情况容易解决。第二种要麻烦一些。我们可以通过查看系统log。例如:CentOS7, /var/log/messages 文件中,会发现类似下面的log:

SELinux is preventing /usr/sbin/httpd from append access on the file......

这时,可以查看SELinux相关log。其路径通常在/var/log/audit下面。

audit.log  audit.log.1  audit.log.2  audit.log.3  audit.log.4  

直接阅读比较难懂我们可以通过运行:sealert -a audit.log (没有sealert命令的可以通过yum install setroubleshoot安装)

经过解析可以获得更加具体的信息,如:

SELinux is preventing /usr/sbin/httpd from write access on the file 83b1a642e5418ddb34687eb7571913ce63e1f0b4.
 

为了去除SELinux对rc.local的干扰。我们可以在运行命令前停掉SELinux.

/usr/sbin/setenforce 0 

在运行命令后在将SELinux起来。

/usr/sbin/setenforce 1

可以通过getenforce来查看SELinux有没有运行。

[root@centos7 audit]# getenforce
Enforcing
 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值