Linux启动流程rcN.d rcS.d rc.local等

2023-05-16

 

1 环境

 

当前系统环境为:Linux mint mate 17.1(基于ubuntu14.04的衍生版)

 

备注:

/etc/rc*.d文件夹中的脚本文件的链接目标为:/etc/init.d文件夹下的脚本(*为系统运行级别‘数字’和字母:S,系统优先运行rcS.d目录下的脚本,然后运行rcN.d下的脚本)。

/etc/inittab: inittab为系统的PID=1的进程,决定这系统启动调用哪些启动脚本文件。

 

 

2 Linux系统启动

 

 

Linux系统主要通过以下步骤启动:

(1) 启动Boot Manager
(2) 加载系统内核,启动init进程, init进程是Linux的根进程,所有的系统进程都是它的子进程。
(3) init进程读取“/etc/inittab”文件中的信进入inittab中预设的运行级别,按顺序运行该运行级别对应文件夹(init*.d)下的脚本。脚本通常以“start”参数启动,并指向一个系统中的程序。通常情况下,“/etc/rcS.d/”目录下的启动脚本首先被执行,然后是“/etc/rcN.d/”目录。例如您设定的运行级别为3,那么它对应的启动目录为“/etc/rc3.d/”。
(4) 根据“/etc/rcS.d/”文件夹中对应的脚本启动Xwindow服务“xorg” 。Xwindow为Linux下的图形用户界面系统。
(5) 启动登录管理器,等待用户登录。

 

 

2.1 系统服务

 

在运行级别对应的文件夹中,您可以看到许多文件名以“S##”和“K##”起始的启动脚本链接

init 进程将以“start”为参数,按文件名顺序执行所有以“S##”起始的脚本。脚本名称中的数字越小,它将被越早执行。

例如在 “/etc/rc2.d/”文件夹中,“S13gdm”文件名中的数字小于“S23xinetd”,“S13gdm”将比“S23xinetd”先执行。

如果一个脚本链接,以“K##”起始,表示它将以“stop”参数被执行。如果相应服务没有启动,则不执行该脚本。

 

 

 

2.2 手动控制服务

 

你可以手动运行带有以下参数的启动脚本,来控制系统服务。
start 启动
stop 停止
restart 重启

例如:
/etc/rc2.d/K20powernowd start
有 时您并不清楚当前运行级别,该运行级别下未必有相应脚本;而且此类脚本的前三位字符并不固定,不便于记忆。

这时,您可以直接使用 “/etc/init.d/”文件夹中的启动脚本(因为“/etc/rcX.d/”中的启动脚本都是链接到“/etc/init.d/”文件夹下相应脚本)

 

 

 

3 Ubuntu系统

 

Ubuntu系统架构关于启动项大致分为四类,每一类都分为系统级和用户级

 

(1) 第一类upstart,或者叫job,由init管理,配置文件目录/etc/init,~/.init
(2) 第二类叫service,由rc.d管理,配置文件目录/etc/init.d,以及/etc/rc.local文件
(3) 第三类叫cron,由contab管理,使用crontab进行配置
(4) 第四类叫startup,由xdg管理,配置文件目录/etc/xdg/autostart,以及~/.config/autostart

 

upstart任务适用于runlevel<5的脚本和程序,service任务适用于runlevel<=5的任务,cron任务则不一定,而startup一般工作在runlevel=5,也就是桌面级。

对于普通用户而言,你的桌面级应用应该使用startup,服务级应用(比如某些功能性的软件脚本)应该使用service,常规性配置可以使用cron,而与启动顺序有关的最好使用upstart。

 

 

3.1 开机启动时自动运行程序

 

Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在

/etc/rcN.d
/etc/rcS.d
目录下的脚本文件,可以使init自动启动其它程序。例如:编辑/etc/rcS.d/rc.local(也就是/etc/rc.local,因为rcS.d链接目标为/etc) 文件(该文件通常是系统最后启动的脚本),

在文件最末加上一行“xinit”或“startx”,可以在开机启动后直接进入X-Window。

 

 

 

3.2 登录时自动运行程序

 

用户登录时,bash先自动执行系统管理员建立的全局登录script :

/ect/profile(大多在此文件中设置环境变量,它是整个桌面环境使用的一个shell进程,也就是登录shell)

>>>在linux中的shell可以分为:登录shell,非登录交互式shell,非登录非交互式shell(执行shell脚本),

>>>具体可以查看另一篇文章: 《 linux中各个shell配置文件的作用域和启动时间 》

然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:

/.bash_profile、
/.bash_login、
/.profile,
但只执行最先找到的一个。因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。

 

3.3 退出登录时自动运行程序

 

退出登录时,bash自动执行个人的退出登录脚本

/.bash_logout。
例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,则在每次退出登录时自动执行 “tar” 命令备份 *.c 文件。

 

 

3.4 定期自动运行程序

 

Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。

例如,建立文件crondFile,内容为“00 9 23 Jan * HappyBirthday”,运行“crontab cronFile”命令后,每当元月23日上午9:00系统自动执行“HappyBirthday”的程序(“*”表示不管当天是星期几)。

 

root@iZ94uwewwwnZ:/# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

 

 

 

3.5 定时自动运行程序一次

 

定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令:

 

$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 2000-11-09 12:00

 

2000-11-09 12:00时候自动发一标题为“Have a lunch”,内容为plan.txt文件内容的邮件给Roger.

 

 

 

4 Ubuntu下添加开机启动脚本

 

(1) rc.local

Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本。

当然要添加到语句:exit 0 前面才行。

 

 

(2) rcN.d

如果要添加为开机启动执行的脚本文件,可先将脚本复制或者软连接到/etc/init.d/目录下,然后用:update-rc.d xxx defaults NN命令(NN为启动顺序),将脚本添加到初始化执行的队列中去。

注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如98 。

(1) 将脚本设为可执行权限,并拷贝至/etc/init.d
(2) 在/etc/init.d路径下执行update-rc.d script-name start 98 5 . 注:98为顺序,5为rc5.d,符号.不要忘记
(3) 这样会在会在/etc/rc5.d/下面创建1个符号链接,有必要在脚本的前段加一些provider/start-default等说明,否则报警

 

另外一种是

(1) 将脚本设为可执行
(2) 在rcN.d下执行ln ../init.d/script-name S99script

 

 

(3) systemd

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文转自:

https://www.cnblogs.com/aaronLinux/p/6860478.html

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux启动流程rcN.d rcS.d rc.local等 的相关文章

  • 全网最详细的排列组合系列算法题整理

    写在前面 LeetCode上面排列组合系列几乎所有题目放在一起整理了一下 面试题 08 07 无重复字符串的排列组合 无重复字符串的排列组合 编写一种方法 xff0c 计算某字符串的所有排列组合 xff0c 字符串每个字符均不相同 示例 输
  • 使用IDEA从git拉取分支

    一 打开IDEA xff0c 进入目录 xff1a File gt New gt Project from Version Control 二 打开git工程 xff0c 进行clone对应的链接 填充对应的链接 三 默认下载的是maste
  • 用了cloudflare后,网站提示Sorry, you have been blocked怎么解决?

    其实cloudflare还是非常智能的 xff0c 但有时候为了安全起见 xff0c 我们在网站后台修改参数的时候会被CF拦截 xff0c 我就遇到了好几次提示Sorry you have been blocked的情况 遇到这种情况后 x
  • 下载网页视频的方法

    随着技术的不断更新 xff0c 现在小视频越来越火 xff0c 有的时候想保存浏览的小视频 xff0c 可不知道如何下载 xff1f 对于一些非专业的视频网站的小视频应该通过浏览器的选项是可以下载和保存的 下面就介绍使用浏览器下载的方法 1
  • tomcat8.0.9的安装

    免安装版的tomcat http download csdn net detail u011731233 7632475 这个解压之后 xff0c 在myeclipse中指定到tomcat目录就可以用了 xff0c 也不用配置环境变量 下载
  • 【多线程/C++】阻塞队列的C++多线程 实现 BlockingQueue

    阻塞队列在存放和获取队列中的数据时需要使用多线程 xff0c 一个线程专门负责向队列中存放元素 xff0c 另一个线程专门从队列中获取元素 也可多开辟跟多的线程进行存取 规范的方法也正是存放和获取队列元素分别在不同的线程中实现 阻塞队列实现
  • Log4J使用详解(整理)

    1 Log4j是什么 Log4j是Apache的一个开源项目 xff0c 通过使用Log4j xff0c 我们可以控制日志信息输送的目的地是控制台 文件 GUI组件 xff0c 甚至是套接口服务器 NT的事件记录器 UNIX Syslog守
  • DelphiXE10.2.3实现线程安全访问数据和对象(四)——实现原子自旋锁的无锁对象池

    无锁对象池与无锁Hash是不同应用场景中使用 xff0c 无锁Hash只是预先创建好Hash表 xff08 当然也可以动态Add xff09 后 xff0c 供调用者通过Key值快速找到保存的数据 xff0c 并读取 xff08 这里就只能
  • init进程详细分析--基于android 10

    init进程详细分析 概述 android设备上电 xff0c 引导程序引导进入boot 通常是uboot xff0c 加载initramfs kernel镜像 xff0c 启动kernel后 xff0c 进入用户态程序 第一个用户空间程序
  • commons-logging的使用

    简介 commons logging是Apache commons类库中的一员 Apache commons类库是一个通用的类库 xff0c 提供了基础的功能 xff0c 比如说commons fileupload xff0c common
  • 年度最理性 AI 分析文章:预测 AI 未来,大部分人陷入了 7 大误区

    来源 xff1a 36氪 概要 xff1a 错误的预测会导致大家对不会发生的事情感到恐惧 为什么在人工智能和机器人的预测上总有人不断犯错呢 xff1f 想着预测未来 xff0c 却一不小心就陷入了yy 近年来图像识别突破 Waymo无人车上
  • slf4j的使用

    OK xff0c 现在我们来使用slf4j 概念 SLF4J xff0c 即简单日志门面 xff08 Simple Logging Facade for Java xff09 xff0c 不是具体的日志解决方案 xff0c 它只服务于各种各
  • Java日志管理最佳实践

    原文出处 xff1a http www ibm com developerworks cn java j lo practicelog 感谢原作者 xff0c 感谢ibm网站 xff0c 里面有好多的精华帖 日志记录是应用程序运行中必不可少
  • MySQL数据类型--浮点数类型和定点数类型

    MySQL中使用浮点数类型和定点数类型来表示小数 浮点数类型包括单精度浮点数 xff08 float型 xff09 和双精度浮点数 xff08 double型 xff09 定点数类型就是decimal型 OK xff0c 现在我们来看看这几
  • MySQL数据类型--日期和时间类型

    MySQL中的多种时间和格式数据类型 日期和时间类型是为了方便在数据库中存储日期和时间而设计的 MySQL中有多种表示日期和时间的数据类型 其中 xff0c year类型表示时间 xff0c date类型表示日期 xff0c time类型表
  • MySQL数据类型--二进制类型

    二进制类型是在数据库中存储二进制数据的数据类型 二进制类型包括binary xff0c varbinary xff0c bit xff0c tinyblob xff0c blob xff0c mediumblob xff0c longblo
  • 单行注释和多行注释

    我们在实际编码中 xff0c 总是需要为程序添加一些注释 什么是注释 xff1f 注释就是一段文字 xff0c 这段文字并不是必须的 xff0c 也不直接参与代码运行 注释用来说明某段代码的作用 xff0c 或者说明某个类的用途 xff0c
  • Integer源码解析

    这篇博客我来整理下以Integer为例整理下包装类的源码 首先来看一段代码 xff1a public class LinkinPark public static void main String args Integer a 61 1 I
  • 不可变类

    不可变类 先来科普2个概念 xff0c 可变类和不可变类 1 xff09 xff0c 不可变类的意思就是创建该类的实例后 xff0c 该实例的实例变量是不可改变的 Java提供的8个包装类和String类都是不可变类 xff0c 当创建他们
  • 博客迁移<a>jiangweili.me</a>

    各位 xff0c 我的博客已经迁移 xff0c 具体请移步新博客地址 我会重新整理JavaSE和JavaEE相关 xff0c 最后搭建自己的一套web框架 xff0c 谢谢各位

随机推荐

  • Mac环境下localhhost无法访问

    今天访问本地服务器 localhost 提示无法访问 查看apache 错误日志最后一行提示以下错误 于是经过百度 搜索 34 AH00045 child process 1409 still did not exit sending a
  • RNAseq---Hisat2 标准输出中比对率信息解读

    RNA Seq Hisat2 标准输出中比对率信息解读 本文具体解释部分 xff08 一 xff09 中内容复制自Biostar内容 xff0c 后面附上我实际的例子 xff0c 二者略有不同 xff0c 整体理解上没大问题 xff0c 有
  • 解决Android单个dex文件不能超过65535个方法问题

    一 找坑 xff1a 谷歌规定单个dex文件中的方法不能超过65536的限制 我们编写项目过程中在工程的lib文件夹下引用的第三方插件jar包太多 或者项目过大 xff0c 编译运行时就有可能报出com android dex DexInd
  • Decode Ways问题及解法

    问题描述 xff1a A message containing letters from A Z is being encoded to numbers using the following mapping 39 A 39 gt 1 39
  • Android性能优化(一)内存泄露优化(静态变量、单例模式、属性动画)

    内存泄露优化分为两个方面 xff0c 一方面是在开发过程中避免写出有内存泄露的代码 xff0c 另一方面是通过一些分析工具比如 MAT来找出潜在的内存泄露继而解决 一 静态变量导致内存泄露 一般情况下静态变量引用了或者内部持有Activit
  • 图论 —— 图的连通性 —— Tarjan 求强连通分量

    概述 Tarjan 算法是基于对图深度优先搜索的算法 xff0c 每个强连通分量为搜索树中的一棵子树 搜索时 xff0c 把当前搜索树中未处理的节点加入一个堆栈 xff0c 回溯时可以判断栈顶到栈中的节点是否为一个强连通分量 基本思路 定义
  • 开发日记(一)

    这是自己编程第二天 xff0c 自己解决了好几个问题 xff0c 觉得很有成就感 xff0c 决定写下以后开发中遇到的问题 1 在多个Activity中传递数据 xff0c 之前只学过绑定基本的putExtra xff0c 今天上网一搜 x
  • 源程序生成控制流图和du-path

    最近上 源代码分析技术 这个课 xff0c 老师让写一个程序 xff0c 由一段c代码 xff0c 生成生成控制流图和du path xff0c 控制流图不用解释了 xff0c 说一下du path xff0c 这个术语是针对变量来说的 x
  • pandas使用笔记

    DataFrame使用笔记 dates 61 pd date range span class hljs string 39 20160728 39 span periods 61 span class hljs number 6 span
  • keras

    大神笔记 xff0c 转载自http blog csdn net u012162613 article details 45397033 Keras简介 Keras是基于Theano的一个深度学习框架 xff0c 它的设计参考了Torch
  • gensim similarity计算文档相似度

    向量空间模型计算文档集合相似性 0 将原始输入的词转换为ID xff0c 词的id表示法简单易用 xff0c 但是无法预测未登记词 xff0c 难以挖掘词关系 xff1b 词汇鸿沟 1 任意两个词之间是独立的 xff0c 无法通过词的ID来
  • doc2vec计算文档相似度

    doc2vec是基于word2vec的 xff0c word2vec对于计算两个词语的相似度效率比较好 xff0c 修改了word2vec中的cbow和skip gram模型 xff0c paragraph vector直接得到doc向量
  • win10远程登录提示“您的远程桌面会话已结束。另一用户已连接到此远程计算机,因此您的连接已丢失……”

    远程登陆的Windows 10 系统是否没有设置密码 xff1f 没有密码的话设计机制是唤醒自动登陆 xff0c 所以会把远程挤下来 xff0c 设置密码就好了
  • Spring注解

    注解介绍 注解有两个作用 xff1a 标注和注入 标注 xff1a 类路径下自动扫描 xff0c 减少在xml中配置bean 例如 64 Component 64 Service注入 xff1a 自动装配 xff0c 需要类的地方直接加注解
  • akka基础

    基本概念消息传递API 通用API消息传递方式 Future机制Actor生命周期处理状态和错误 监督kill actor生命周期监控和DeathWatch安全重启状态 纵向扩展 Router调度方式使用策略 横向扩展 订阅集群事件启动 退
  • Ubuntu使用root登录系统界面、免密码、添加开机启动

    以下测试环境为Ubuntu 16 04 一 使用root登录系统界面 Ubuntu在命令行模式下 xff0c 是可以登录root的 为了安全 xff0c 在图形界面模式下 xff0c 默认不允许使用root登录系统 可以通过修改50 uni
  • 线程(Thread)的三种等待唤醒机制详解

    1 为什么需要线程的等待和唤醒 线程的等待唤醒机制是一种经典的 生产者和消费者 模型 例如食品加工厂 xff0c 食品加工人员和原料补给人员 xff0c 在有充足原料时 xff0c 补给人员是在等待 xff0c 等到原料不够时 xff0c
  • Linux常用终端命令之cat、grep、echo

    这三个指令 xff0c 每一个都很常用 xff0c 用法也都很多 作为一个linux初学者 xff0c 我还不能很好的掌握三个命令的用法 xff0c 于是先在这篇博客里做一个简单的整理和总结 xff0c 以加深对三个指令的理解 grep 先
  • Python+Pycharm使用opencv

    http blog csdn net whykifan article details 66478421 在这个配置过程中 xff0c 遇到了不少的问题 xff0c 于是就写了这篇博文 xff0c 希望可以帮到遇到相同问题的人 主要步骤 x
  • Linux启动流程rcN.d rcS.d rc.local等

    1 环境 当前系统环境为 xff1a Linux mint mate 17 1 基于ubuntu14 04的衍生版 备注 xff1a etc rc d文件夹中的脚本文件的链接目标为 xff1a etc init d文件夹下的脚本 为系统运行