前言

环境:Centos7.9

rc.local文件开机不执行

前些天在做Linux项目的时候发现,需要有些组件开机自启动,所有把脚本放到了 /etc/rc.local 下,同时也查看了rc.local 文件的权限,如下:

[oracle@iflytek etc]$ ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Jul 16 16:23 /etc/rc.local -> rc.d/rc.local

rc.local 文件已经有可执行权限,可是centos重启开机后,自己写得脚本却没有执行,这就纳闷了,于是把自己写的脚本单独拿出来在命令行执行,也会执行成功的,那么为什么centos重启后,自己写得脚本却没有执行,难道是/etc/rc.local 没有执行吗?不可能啊,rc.local 就是放开机自启动软件的脚本呀,也有可执行权限呀,怎么回事?

找到原因了

原来,挖槽,/etc/rc.local 执向的实际文件/etc/rc.d/rc.local 没有可执行权限,如下:

[oracle@iflytek etc]$ ll /etc/rc.d/rc.local
-rw-------. 1 root root 543 Jul 16 17:40 /etc/rc.d/rc.local[oracle@iflytek etc]$  chmod a+rx  /etc/rc.d/rc.local

于是给/etc/rc.d/rc.local赋予可执行权限,重启Centos,自己写得脚本执行正常。

为什么软连接的权限和实际执行的文件权限不同

于是,为了验证软链接的权限和实际执行的文件权限,为什么不同,故意进行测试,如下:

[oracle@iflytek ~]$ touch file
[oracle@iflytek ~]$ ln -s file lsfile
[oracle@iflytek ~]$ ll file lsfile
-rw-r--r-- 1 oracle oinstall 0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

发现,系统默认创建的软链接权限是777,而软链接实际执行的文件却没有可执行权限,现在我们来改变软链接的权限看看,如下:

[oracle@iflytek ~]$ chmod  000  lsfile
[oracle@iflytek ~]$ ll file lsfile
---------- 1 oracle oinstall 0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

我擦,看到的软链接的权限丝毫没变,其实际文件的权限变了,再试一次,如下:

[oracle@iflytek ~]$ chmod +rw,u+x,g+x lsfile
[oracle@iflytek ~]$ ll file lsfile
-rwxr-xr-- 1 oracle oinstall 0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

我擦,真的,改变软链接权限实际看来就是改变了其实际指向文件的权限,而软链接权限永远都是777。

再来测试,改变实际文件的属组看看,如下:

[oracle@iflytek ~]$ sudo chown root.root lsfile
[oracle@iflytek ~]$ ll file  lsfile
-rwxr-xr-- 1 root   root     0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file           #软连接的属组没变[oracle@iflytek ~]$ sudo chown oracle.ntp  file
[oracle@iflytek ~]$ ll file
-rwxr-xr-- 1 oracle ntp 0 Jul 17 23:40 file
[oracle@iflytek ~]$ ll file  lsfile
-rwxr-xr-- 1 oracle ntp      0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file[oracle@iflytek ~]$ sudo chown  root:dba lsfile
[sudo] password for oracle:
[oracle@iflytek ~]$ ll file  lsfile
-rwxr-xr-- 1 root   dba      0 Jul 17 23:40 file                    #属组和属组改变了
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file           #软链接显示的属组和属组没有改变了对目录创建软链接看看,如下:
[oracle@iflytek ~]$ mkdir test && ln -s test lntest    && touch test/filexxx       #对test目录创建一个软建立并创建一个普通文件
[oracle@iflytek ~]$ ll  test/filexxx
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 test/filexxx
[oracle@iflytek ~]$ ll  lntest/filexxx
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 lntest/filexxx[oracle@iflytek ~]$ chmod 000 test/filexxx                           #对test/filexxx 改变权限
[oracle@iflytek ~]$ ll test/filexxx
---------- 1 oracle oinstall 0 Jul 18 00:01 test/filexxx
[oracle@iflytek ~]$ ll lntest/filexxx
---------- 1 oracle oinstall 0 Jul 18 00:01 lntest/filexxx          [oracle@iflytek ~]$ chmod +rw ./lntest/filexxx                        #再加回权限
[oracle@iflytek ~]$ ll test/filexxx  lntest/filexxx
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 lntest/filexxx
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 test/filexxx[oracle@iflytek ~]$ ll test/      lntest/ -d                       #查看目录的权限
drwxr-xr-x 2 oracle oinstall 21 Jul 18 00:01 lntest/
drwxr-xr-x 2 oracle oinstall 21 Jul 18 00:01 test/[oracle@iflytek ~]$ sudo chown -R root:dba lntest/                   #修改软链接的属组和属主
[oracle@iflytek ~]$ ll test/      lntest/ -d
drwxr-xr-x 2 root dba 21 Jul 18 00:01 lntest/                       #两者的属组和属主都改变了
drwxr-xr-x 2 root dba 21 Jul 18 00:01 test/
[oracle@iflytek ~]$ ll test/      lntest/
lntest/:
total 0
-rw-r--r-- 1 root dba 0 Jul 18 00:01 filexxx                        #加了-R,所以其下的文件属组和属主都变了
test/:
total 0
-rw-r--r-- 1 root dba 0 Jul 18 00:01 filexxx[oracle@iflytek ~]$ sudo chown -R  oracle:root test/               #修改的是实际文件的权限
[oracle@iflytek ~]$ ll test/      lntest/ -d
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 lntest/                    #两者的属组和属主都改变了
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 test/                      #两者的属组和属主都改变了[oracle@iflytek ~]$ chmod -x test/                                    #改变实际文件的权限试试
[oracle@iflytek ~]$ ll test/      lntest/ -d
drw-r--r-- 2 oracle root 21 Jul 18 00:01 lntest/                    #两者的权限都改变了
drw-r--r-- 2 oracle root 21 Jul 18 00:01 test/                      #两者的权限都改变了[oracle@iflytek ~]$ chmod +x lntest/                                #改变软链接文件的权限试试
[oracle@iflytek ~]$ ll test/      lntest/ -d
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 lntest/                    #两者的权限都改变了
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 test/                      #两者的权限都改变了

总结

对指向普通文件类型的软链接来说:
1、以后直接对/etc/rc.d/rc.local 赋予可执行权限;
2、修改软链接的内容就是修改实际文件的内容;
3、创建一个普通文件的软链接的其权限默认就是777,但不要易误以为看到软链接具有的权限就以为其实际文件也具有权限,这是错误的看法;
4、对软链接进行权限chmod、属主属组chown的修改,其权限修改结果会直接反映到其实际文件,但软链接具有的权限及属主属主仍保持不变;
5、当实际文件的属主属组改变了,由于第3点所说的,所以建议删除软链接,重新建立软链接;

对指向目录类型的软链接来说:
6、无论对软链接还是对实际目录文件作出权限属主等的修改,两者都是保持一致的。

以上,就是本人测试的结果,可能不是完全的正确,欢迎懂的人多多交流。

rc.local文件开机不执行相关推荐

  1. 【Linux】rc.local和rc.d/rc.local的区别|rc.local文件开机不执行

    rc.local和rc.d/rc.local的区别 /etc/rc.d/rc.local 用于添加开机启动命令 /etc/rc.local是/etc/rc.d/rc.local的软连接 rc.loca ...

  2. Linux系统开机后/etc/rc.d/rc.local文件中的命令没有执行(已解决)

    今天想将linux系统上的svn服务添加到开机自启动,结果重启机器后发现svn服务根本没有起来,检查了添加到/etc/rc.d/rc.local文件的命令没有问题,如下: 看了文件的注释部分才知道,原 ...

  3. 解决问题:/etc/rc.local文件配置的开机启动项不生效

    解决问题:/etc/rc.local文件配置的开机启动项不生效 首先查看/etc/rc.local文件内容,寻找问题出现的原因. [root@localhost ~]# cat /etc/rc.loc ...

  4. linux修改rc.local权限,Linux 7 的 rc.local 文件需要 添加 +x 权限才会自动执行

    vmware 克隆的虚拟机添加的网关的没有生效,每次重启后都需要手工添加网关. 所以将添加命令写到/etc/rc.local 文件里了. https://www.cndba.cn/dave/artic ...

  5. linux添加x权限,Linux 7 的 rc.local 文件需要 添加 +x 权限才会自动执行

    vmware 克隆的虚拟机添加的网关的没有生效,每次重启后都需要手工添加网关. 所以将添加命令写到/etc/rc.local 文件里了. https://www.cndba.cn/Dave/artic ...

  6. 解决linux下/etc/rc.local开机器不执行的原因

    解决linux下/etc/rc.local开机器不执行的原因. 今天一用户报数据库又连接不上了,一检查发现机器重启了,手工启动即可,但想到每次都这样,于是做了一个自动启动脚本 /home/oracle ...

  7. linux 下编辑 rc.local 设置开机启动

    设置开机启动示例: # touch /etc/init.d/rc.local 设置为可执行: # chmod +x /etc/init.d/rc.local 用 update-rc.d 设置启动级别: ...

  8. Ubuntu18 没有/etc/rc.local文件 SSH自启动设置 WSL中和单独ubuntu系统中

    文章目录 WSL中的ubuntu自启动项设置 1. 创建并编辑 /etc/init.wsl 2. 给/etc/init.wsl添加执行权限 3. 编辑sudoers,避免输入密码 4. 在Window ...

  9. Linux中没有rc.local文件的解决方法

    1.设置rc-local.service sudo vim /etc/systemd/system/rc-local.service [Unit]Description=/etc/rc.local C ...

  10. 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例

    本文将自己遇到的一些自定义脚本加入开机启动项却不成功的问题加以说明,花费了我很长时间才得以解决,当然也多谢了自己朋友的帮忙,正是因为他们的提醒,最后才找到了解决的办法,谢谢他们!!!! 系统是cent ...

最新文章

  1. 如何使ResNet优于EfficientNet?
  2. zzuli 20级新生周赛(1)题解
  3. ajax .done 应该怎么写_软文推广的文章应该怎么写好呢
  4. UNICODE与UTF-8的转换
  5. 邮件发送类,支持Gmail
  6. [css] 举例说明微信端兼容问题有哪些?
  7. 地图的四着色 (CSU-1508)
  8. 比python好_这就是为什么Python比R更好的原因
  9. pyqt5 qstring在哪个库_PyQt模型/视图结构编程示例:QStringListModel的用法
  10. Java冒泡排序法 降序
  11. u盘启动蓝屏 索尼vaio_索尼笔记本电脑安装系统后出现蓝屏怎么处理
  12. 【机器学习-周志华】学习笔记-第十章
  13. PowerDesign的基本使用
  14. Java实现Native微信支付 超完整流程
  15. react+mobx+jquery构建大型工具项目经验总结
  16. 动态代理ip的测试步骤有哪些?
  17. Ubuntu 20.04.1 安装ROS-noetic 遇到的环境设置问题
  18. 中国股市实行T+1,这是保护散户还是坑散户?
  19. Your ApplicationContext is unlikely tostart due to a @ComponentScan of the defau
  20. python--定义新矩阵、矩阵赋值、改变类型

热门文章

  1. 记一次mybatis-plus遇到的问题
  2. 第 7 章 Neutron - 073 - Service Plugin / Agent
  3. 在opensuse tumbleweed 上开发51单片机
  4. Sentinel 哨兵 实现redis高可用
  5. PHP使用Apache中的ab测试网站的压力性能及mpm介绍
  6. Centos6.5下搭建nagios详解
  7. 最长回文字串--动态规划
  8. LNMP编译安装教程
  9. vim 插件之supertab
  10. Ajax方法实现登录页面