首页 > 系统相关 >Linux启动流程rcN.d rcS.d rc.local等

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

时间:2022-11-15 11:36:54浏览次数:50  
标签:脚本 启动 rc init rcS etc rcN Linux 执行

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

标签:脚本,启动,rc,init,rcS,etc,rcN,Linux,执行
From: https://www.cnblogs.com/qirui88/p/16891773.html

相关文章

  • Linux-终端命令格式-笔记
    目标了解终端命令格式知道如何查阅终端命令帮助信息01.终端命令格式command[-options][parameter]说明:​​command​​:命令名,相应功能的英文单词或单词的缩写​​[-optio......
  • Linux-文件和目录常用命令-笔记
    目标查看目录内容​​ls​​切换目录​​cd​​创建和删除操作​​touch​​​​rm​​​​mkdir​​拷贝和移动文件​​cp​​​​mv​​查看文件内容​​cat​​​​more......
  • linux SSH配置
    linuxSSH配置1、简介SSH(SecureShell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用......
  • Linux安装ODBC连接SQLServer数据库
    操作系统:Centos7.21、下载ODBC安装包unixODBC-2.3.9.tar.gzfreetds-1.3.9.tar.gz下载这两个压缩包的地址:ftp://ftp.freetds.org/pub/freetds/stable/ftp://ftp.unixodb......
  • Linux基础11 重定向(输入重定向,输出重定向); 管道技术, tee, xargs
    1.重定向 将原本要输出到屏幕上的内容,重新指向一个文件或者设备中,屏幕上不会输出原本的内容。为什么要使用重定向: 1.当屏幕输出的信息很重要,而且希望保存重要的信息时。 ......
  • Linux FHS结构
    linux的文件系统分层结构FileSystemHierarchyStanddard(简称FHS)1、文件系统的目录结构:文件和目录被一个组织成一个单根倒置树结构文件系统从根目录下开始,用“/”表......
  • Qt音视频开发02-海康sdk解码(支持句柄/回调/gpu模式/支持win/linux)
    一、前言为何还要选用使用海康sdk,之前不是ffmpeg已经牛皮吹上天了吗?这个问题问得好,那是因为无论ffmpeg也好还是vlc/mpv之类的,都是实现的播放相关,不同的监控硬件厂家对应设......
  • Windows编写Shell脚本在Linux上运行报错的问题记录
    问题:bin/sh^M:badinterpreter:Nosuchfileordirectory原因:.sh脚本在windows系统下用记事本文件编写的。不同系统的编码格式引起的。解决方法:修改.sh文件格式(1)使用......
  • Linux redis设置开机自启动
    redis安装启动这些就不说了,默认都已经好了的,接下来直接设置开机自启动。1、修改redis.conf文件 daemonize:Redis默认不是以守护进程(daemonize)的方式运行,可以通过该配置......
  • linux input子系统的event编号修改
    linuxinput子系统的event编号修改在对接甲方的时候,一些input外设需要固定的input、event编号。而不同厂家不同型号的驱动在内核中加载的顺序不同,因此/dev/input下的event......