linux会在开机之后自动source执行/etc/rc.local 那么它与init.d目录中的脚本有什么区别呢?

上一篇博客其实已经说了这两种脚本的作用了,这里再具体说一点

个人理解: init.d目录中的脚本都是以服务的形式启动的,顾名思义,服务会在后台一直运行

所以,系统在执行init.d目录中的服务脚本时,会分别单独为每个服务脚本启动一个非登录非交互式shell来始终在后台运行服务脚本一直到用户退出登录,关闭系统,

这些始终运行在各个非登录非交互式的shell中的服务脚本才会停止运行

那么/etc/rc.local这个脚本呢,它是怎么运行的呢

可以打开这个脚本看看,发现默认只有一行命令:

exit 0

说明,这个脚本要以0这个返回参数来结束这个脚本的运行,而系统则要以是否得到0这个返参来决定是否继续进行下一步开机步骤

那么,可以这样理解,rc.local这个脚本中的命令不能像服务脚本那样始终占用这个系统为了执行rc.local而启动的非登录非交互式shell,

而应该每一条命令都可以自动执行完毕,一直执行到:exit 0 这句命令,而且是必须执行到这句命令,否则系统将卡在这个脚本,无法继续开机

比如,rc.local中可以在‘exit 0’这一行上面写如下的几种命令:

ls echo 12345>/home/text.txt

rm -rf /home/user/.cache

..........

等等,可以自动执行到结束的命令,不需要手动结束这个命令

等所有命令运行结束后就会运行exit 0来退出当前shell,当这个shell退出后,系统才会继续下一步开机步骤

但是,不可以写,不能自动执行完毕的命令!

如:

/etc/init.d/xxx.sh(一个服务脚本) start

或者:

cat (单独执行cat命令会等待用户输入,直到用户按下Ctrl+d后才会退出cat命令)

以上两个命令都不能自动执行到命令结束或是需要用户操作才能结束命令的运行

那么这种命令就会始终占用系统为rc.local开启的shell,导致这个shell无法执行到exit 0这句命令

也就是说这个shell无法以0为返参退出,那么系统就会始终等待这个shell退出,从而导致无法继续开机

上面说了,运行rc.local的shell必定要退出关闭(否则无法开机),所以rc.local这个脚本中,不要写设置系统环境变量的命令,或者是设置alias别名的语句

因为环境变量和别名的作用域都是当前shell,当这个shell退出后,这些变量和别名也就不存在了,

所以环境变量建议写在登录shell配置文件中,也就是/etc/profile中,

而你要使用的别名,可以这样设置:

图形化系统环境:非登录交互式shell的配置文件/etc/bash.rc (还有其他的也可以,这里不多说)

字符系统环境:登录shell的配置文件/etc/profile和非登录交互式shell的配置文件/etc/bash.rc (还有其他的也可以,这里不多说)

############结束##############

转载于:https://blog.51cto.com/sgc666/1879616

linux中/etc/rc.local脚本的作用相关推荐

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

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

  2. 理解Linux系统/etc/init.d目录和/etc/rc.local脚本

    本文英语版本来自:http://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/ 以下内容是作者自己的翻译版本,如 ...

  3. linux中自动启动不了怎么办,linux:/etc/rc.local 不能自动启动问题

    前段时间安装LNMP环境,配置/etc/rc.local的时候配置了启动mysql.nginx.php以及关闭防火墙,可结果重启了七八次还是自启动不了后来终于找到原因了 看下图: /etc/rc.lo ...

  4. CentOS 7中/etc/rc.local开机启动脚本不生效怎么办?

    问题现象 CentOS 7.EulerOS操作系统云服务器中,/etc/rc.local开机启动脚本不生效. 本节操作以CentOS 7操作系统为例分析根因,并介绍解决方法. 根因分析 出现该问题的可 ...

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

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

  6. /etc/init.d目录和/etc/rc.local脚本

    一.关于/etc/init.d 如果你使用过Linux系统,那么你一定听说过init.d目录.这个目录到底是干嘛的呢?它归根结底只做了一件事情,但这件事情非同小可,是为整个系统做的,因此它非常重要.i ...

  7. 【python脚本】linux中编写运行python脚本

    linux中编写运行python脚本 以/home/me/share目录下的hello脚本为例 解释器 #! /usr/bin/pythonprint('hello') print('hi') pri ...

  8. 【DB笔试面试606】在Oracle中,coe_xfr_sql_profile.sql脚本的作用是什么?

    ♣题目部分 在Oracle中,coe_xfr_sql_profile.sql脚本的作用是什么? ♣答案部分 使用coe_xfr_sql_profile.sql脚本生成sqlprof_attr数据 最麻 ...

  9. 【DB笔试面试607】在Oracle中,coe_load_sql_profile.sql脚本的作用是什么?

    ♣题目 部分 在Oracle中,coe_load_sql_profile.sql脚本的作用是什么? ♣答案部分 可以使用coe_load_sql_profile.sql脚本直接固定执行计划,该脚本也可 ...

  10. Linux中shell语法和脚本编写

    Linux中shell语法和脚本编写 原文地址:学习shell的语法,及脚本编写 其它相关辅助资料: 编写shell脚本所需的语法和示例 基础linux指令&简单的shell语法和脚本编写 什 ...

最新文章

  1. CodeForces:54
  2. 接口测试实例(jmeter)
  3. Maven + Nexus + SVN + Eclipse 配置步骤说明
  4. SSH框架整合——基于注解
  5. matlab ode45三体问题,“毕达哥拉斯3Body Proxblem”ODE解算器测试的下一步
  6. PHP-CGI进程占用过多CPU
  7. 原生编辑器_微信小程序 广告原生模板广告
  8. 2015 Objective-C 新特性
  9. 2021-11-10全球货币市场基础知识系列3
  10. TM4C129建立FREERTOS工程
  11. NoSQL Scylla Open Source 3.0食量比Cassandra大
  12. sql如何查看数据库表的关联关系?
  13. EntityFramework 用Moles的mock
  14. 安卓项目查手机电量功能_Android获取手机电池电量用法实例
  15. nginx详细文档 – 安装配置,深入源码,模块编写,编译器参数,系统函数
  16. invalidate()和postInvalidate() 的区别及使用
  17. JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快!
  18. linux配置host
  19. Python水滴筹模拟筹款工具
  20. android 带刻度的滑动条_Android实现滑动刻度尺效果

热门文章

  1. IOS xib 和storyboard的区别
  2. SP2010开发和VS2010专家食谱--第七章节--使用客户端对象模型
  3. php加速 PHP APC 浅析
  4. Clash of Clans通关秘诀
  5. 每月读书 2012-06
  6. 搭建Windows SVN服务器及TortoiseSVN使用帮助和下载
  7. 在 Delphi 下使用 DirectSound (1): 枚举播放设备
  8. android 通过串口来控制pwm的输出_ESP8266_07基于PWM的呼吸灯
  9. python变量赋值方式_【Python入门学习】详谈python变量和变量赋值语句
  10. hbase常识及habse适合什么场景