linux开机启动脚本的顺序

合集下载

Linux—添加开机启动(服务脚本)

Linux—添加开机启动(服务脚本)

Linux—添加开机启动(服务脚本)系统启动时需要加载的配置⽂件/etc/profile、/root/.bash_profile/etc/bashrc、/root/.bashrc/etc/profile.d/*.sh、/etc/profile.d/lang.sh/etc/sysconfig/i18n、/etc/rc.local(/etc/rc.d/rc.local)⼀、修改开机启动⽂件:/etc/rc.local(或者/etc/rc.d/rc.local)# 1.编辑rc.local⽂件[root@localhost ~]# vi /etc/rc.local# 2.修改rc.local⽂件,在 exit 0前⾯加⼊以下命令。

保存并退出。

/etc/init.d/mysqld start # mysql开机启动/etc/init.d/nginx start # nginx开机启动supervisord -c /etc/supervisor/supervisord.conf # supervisord开机启动/bin/bash /server/scripts/test.sh >/dev/null2>/dev/null# 3.最后修改rc.local⽂件的执⾏权限[root@localhost ~]# chmod +x /etc/rc.local[root@localhost ~]# chmod755 /etc/rc.local⼆、⾃⼰写⼀个shell脚本将写好的脚本(.sh⽂件)放到⽬录 /etc/profile.d/ 下,系统启动后就会⾃动执⾏该⽬录下的所有shell脚本。

三、通过chkconfig命令设置# 1.将(脚本)启动⽂件移动到 /etc/init.d/或者/etc/rc.d/init.d/⽬录下。

(前者是后者的软连接)mv /www/wwwroot/test.sh /etc/rc.d/init.d# 2.启动⽂件前⾯务必添加如下三⾏代码,否侧会提⽰chkconfig不⽀持。

Linux系统服务启停脚本

Linux系统服务启停脚本

Linux系统服务启停脚本Linux系统服务是在操作系统中运行的程序,可以提供不同的功能和服务。

对于管理员和系统运维人员来说,启动和停止服务是日常工作中常见的任务之一。

为了方便管理和操作,编写一个系统服务启停脚本是非常有必要的。

下面是一个基本的Linux系统服务启停脚本的示例:```bash#!/bin/bash### BEGIN INIT INFO# Provides: myservice# Required-Start: $remote_fs $syslog# Required-Stop: $remote_fs $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: My Service# Description: This script starts and stops My Service.### END INIT INFO# 定义变量SERVICE_NAME="myservice"SERVICE_PATH="/path/to/service" SERVICE_FILE="myservice.sh"PID_FILE="/var/run/myservice.pid" # 启动函数start() {# 检查服务是否已经在运行if [ -f "$PID_FILE" ]; thenecho "Service is already running." exit 1fi# 启动服务cd "$SERVICE_PATH"./"$SERVICE_FILE" &PID=$!echo $PID > "$PID_FILE"echo "Service started."}# 停止函数stop() {# 检查服务是否在运行if [ ! -f "$PID_FILE" ]; thenecho "Service is not running." exit 1fi# 停止服务PID=$(cat "$PID_FILE")kill "$PID"rm -f "$PID_FILE"echo "Service stopped."}# 重启函数restart() {stopsleep 1startecho "Service restarted."}# 控制参数case "$1" instart)start;;stop)stop;;restart)restart;;*)echo "Usage: $0 {start|stop|restart}"exit 1;;esac```以上脚本演示了一个名为"myservice"的服务的启停控制逻辑。

linux开机自启动命令

linux开机自启动命令

linux开机自启动命令用户想要在linux开机的时候自启动相关的程序。

那我们要怎么设置呢?下面由店铺为大家整理了linux下开机自启动命令的相关知识,希望对大家有所帮助!linux下开机自启动命令1.开机启动时自动运行程序Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。

init根据配置文件继续引导过程,启动其它进程。

通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。

例如:编辑/etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。

扩展:其他情况下linux自启动程序命令2.登录时自动运行程序用户登录时,bash首先自动执行系统管理员建立的全局登录script :/etc/profile。

然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的一个。

因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。

3.退出登录时自动运行程序退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。

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

4.定期自动运行程序linux有一个称为crond的守护程序,主要功能是周期性地检查/var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。

用户可以通过crontab 命令来建立、修改、删除这些命令文件。

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。

为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。

本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。

一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。

在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。

例如,数据库服务可能需要在网络服务启动之后才能正常工作。

通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。

二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。

下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。

可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。

这样可以避免启动时的冲突和错误。

例如,假设我们有三个服务需要启动:A、B和C。

服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。

因此,启动的顺序应为A、B、C。

2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。

在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。

然后,按照定义的服务启动顺序,逐个启动每个服务。

下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。

在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。

Linux系统如何设置开机自动运行脚本

Linux系统如何设置开机自动运行脚本

在Windows 下,我们有很多方法可以设置开机启动,但在Linux 系统下我们需要如何操作呢?Linux 下同样可以设置开机启动,但可能需要我们敲一些命令(可能也有 UI 界面的设置方法,但我不熟,我更多是玩命令)。

下面我们就介绍三种简单但可行的开机启动设置方法。

方法一:修改/etc/rc.d/rc.local 文件/etc/rc.d/rc.local文件会在 Linux 系统各项服务都启动完毕之后再被运行。

所以你想要自己的脚本在开机后被运行的话,可以将自己脚本路径加到该文件里。

但是,首先需要确认你有运行这个文件的权限。

$ chmod +x /etc/rc.d/rc.local为了演示,我们创建了一个脚本,当它被执行之后,将在家目录下写入有特定信息的文件。

$ vim auto_run_script.sh#!/bin/bashdate >> /home/alvin/output.txthostname >> /home/alvin/output.txt保存退出后,再给它赋予可执行权限:$ chmod +x auto_run_script.sh然后,我们再将脚本添加到/etc/rc.d/rc.local文件最后一行:$ vim /etc/rc.d/rc.local/home/alvin/auto_run_script.sh接下来,我们就可以试试效果了。

直接重启系统就可以了:$ sudo reboot重启之后,就会在家目录下看到脚本执行的结果了。

方法二:使用crontab大家知道,crontab 是 Linux 下的计划任务,当时间达到我们设定的时间时,可以自动触发某些脚本的运行。

我们可以自己设置计划任务时间,然后编写对应的脚本。

但是,有个特殊的任务,叫作@reboot,我们其实也可以直接从它的字面意义看出来,这个任务就是在系统重启之后自动运行某个脚本。

那它将运行的是什么脚本呢?我们如何去设置这个脚本呢?我们可以通过crontab -e来设置。

Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作

Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作

Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作在Linux系统中,服务是指在后台运行并提供各种功能的应用程序。

对于系统管理员来说,管理服务是非常重要和常见的任务。

为了更高效地管理Linux系统服务,可以使用Shell脚本实现对服务的启动、停止和重启操作。

本文将介绍如何使用Shell脚本来管理Linux系统服务。

一、编写Shell脚本首先,我们需要创建一个Shell脚本文件,例如名为“service_manage.sh”。

使用任何一个文本编辑器,打开一个新的文件,并输入以下内容:```shell#!/bin/bashfunction start_service {sudo systemctl start $1}function stop_service {sudo systemctl stop $1}function restart_service {sudo systemctl restart $1}echo "欢迎使用Linux系统服务管理脚本" echo "请输入您想要执行的操作:"echo "1. 启动服务"echo "2. 停止服务"echo "3. 重启服务"read choicecase $choice in1)echo "请输入要启动的服务名:"read service_namestart_service $service_name;;2)echo "请输入要停止的服务名:"read service_namestop_service $service_name;;echo "请输入要重启的服务名:"read service_namerestart_service $service_name;;*)echo "无效的选择";;esac```上述脚本定义了三个函数:`start_service`、`stop_service`和`restart_service`,分别用于启动、停止和重启服务。

Linux启动脚本

Linux启动脚本

Linux启动流程详解从用户打开电源到用户可以登录的这短短的一段时间内,Red Hat Enterprise Linux到底都作了哪些事情,只有知道了这些事情,用户在以后的使用过程中,如果出现了一些问题,我们可以借助这些过程来为我们排除一些故障。

Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作主要是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等主要是为了检查这些设备在开机的时候是否能通过检测,如果能通过检测,说明电脑可以正常的工作。

------------------------------载入启动程序BIOS自检完成后,BIOS会根据用户设置的启动顺序来由那个设备来启动电脑的操作系统,这个设备一般是硬盘。

也就是进入到硬盘的MBR区域,这个区域中的有512个字节的大小,其中前446个字节中保存的程序是选择启动分区,也就是电脑由那个硬盘分区来载入开机的程序。

那么在这个446个字节的空间中保存的就是启动程序,然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub程序。

grub程序的这个配置文件是保存在:/boot/grun/grub.conf这个文件中,如果修改完这个文件后,设置会立刻生效。

现在来看看这个文件的内容以及语法: 使用cat /boot/grub/grub.conf,就会出现这个文件的内容,最前面是注释。

可以将这个文件逻辑上分为两个部分,第一个部分是基本设定,第二个部分是区分开多个操作系统的设定。

第一个部分中的defaule=0,是指第一组操作系统开机。

如果有两组操作系统的开机设定,而defaule=1,那么预设使用第二组操作系统开机。

所谓 第一组和第二组程序就是指的是title开始的部分,这里是区分操作系统的部分。

双系统Linux下系统启动顺序更改

双系统Linux下系统启动顺序更改

linux多核心的启动菜单修改默认启动为windowsubuntu/linux升级后编辑多核心的启动菜单并修改默认菜单为windows备份一下源文件: cp /boot/grub/menu.lst /boot/grub/menu.lst.backup编辑菜单文件: sudu gedit /boot/grub/menu.lst然后会打开文本编辑器:在不要的核心启动项目的行前面添加#即可,例如#title Ubuntu, kernel 2.6.17-10-generic#root (hd0,2)#kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/sda3 ro quiet splash locale=zh_CN#initrd /boot/initrd.img-2.6.17-10-generic#quiet#savedefault#boot#title Ubuntu, kernel 2.6.17-10-generic (recovery mode)#root (hd0,2)#kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/sda3 ro single#initrd /boot/initrd.img-2.6.17-10-generic#boot最后一段的window复制到引导段的最前端:# This entry automatically added by the Debian installer for a non-linux OS# on /dev/sda1title Microsoft Windows XP Professionalroot (hd0,0)savedefaultmakeactivechainloader +1分割段复制到第二段,也可以删除:# This is a divider, added to separate the menu items below from the Debian# ones.title Other operating systems:root其中各个段的title就是启动菜单项目的名称,可以自己修改,例如title Other operating systems:可以修改为:title --------------------------------这样更加清晰一些.启动菜单还有颜色可选择,默认是被注释掉的,详情请查看相关注释,好像是#color那一行.默认有蓝白/黑白模式,也可以自己填入其他颜色方法2:1、打开命令行终端;2、输入:sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.baksudo gedit /boot/grub/menu.lst注:第一句做备份用。

Linux系统服务自动启动脚本

Linux系统服务自动启动脚本

Linux系统服务自动启动脚本Linux系统是一种广泛应用的操作系统,在服务器和个人电脑上都得到了广泛的应用。

为了保证系统服务的及时启动,我们需要使用自动启动脚本来管理各种服务。

本文将介绍Linux系统服务自动启动脚本的使用方法和注意事项。

一、什么是Linux系统服务自动启动脚本?Linux系统服务自动启动脚本是一种用于管理系统服务的脚本文件。

它可以在系统启动时自动运行,并根据预设的配置文件,启动、停止或重启指定的服务。

通过自动启动脚本,我们可以实现系统服务的自动管理,提高系统的稳定性和可靠性。

二、自动启动脚本的编写1. 脚本文件的位置一般情况下,自动启动脚本文件存放在/etc/init.d/目录下。

这是Linux系统中默认的脚本存放位置。

你也可以根据自己的需要将脚本文件存放在其他位置,但要确保系统能够找到并正确执行脚本。

2. 脚本内容的编写自动启动脚本的编写需要注意以下几点:- 根据系统要求,脚本文件必须以#!/bin/bash开头,以告诉系统使用bash作为解释器执行脚本。

- 在脚本的最开始,应该加上适当的注释,说明脚本的用途和功能。

- 脚本中应该包含启动、停止和重启服务的代码。

可以使用特定的命令如systemctl、service等来实现。

- 脚本应该提供start、stop和restart等选项,以便用户在执行脚本时可以选择不同的操作。

- 在脚本的结尾处,应该添加exit命令来结束脚本的执行。

三、自动启动脚本的使用方法使用自动启动脚本可以提高系统服务管理的效率,下面是使用自动启动脚本的基本步骤:1. 编写脚本文件按照前面所述的规范编写自动启动脚本文件,并保存在适当的位置。

2. 设置脚本文件的执行权限使用chmod命令给脚本文件添加执行权限,例如:```chmod +x /etc/init.d/myscript```3. 添加脚本到自启动列表使用chkconfig命令将脚本添加到系统的自启动列表中,例如:```chkconfig --add myscript```4. 启动服务使用service命令启动服务,例如:```service myscript start```至此,你的自动启动脚本已经完成了配置和启动。

linux启动顺序讲解

linux启动顺序讲解

linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。

linux启动过程以及如何将进程加入开机自启

linux启动过程以及如何将进程加入开机自启

linux启动过程以及如何将进程加⼊开机⾃启linux 启动流程系统启动主要顺序就是:1. 加载内核2. 启动初始化进程3. 确定运⾏级别4. 加载开机启动程序5. ⽤户登录启动流程的具体细节可以看看Linux 的启动流程第4步加载启动程序其实是两步:1. init进程逐⼀加载开机启动程序,其实就是运⾏指定⽬录⾥的启动脚本。

2. 在运⾏完指定⽬录⾥⾯的程序后init进程还会去执⾏/etc/rc.local 这个脚本。

ps:“指定⽬录”是指在第3步中设置的运⾏级别对应的⽬录。

要完成我们的需求,我们使⽤第4步中的任意⼀种⽅式都可以。

⽅式⼀,chkconfig以supervisord服务脚本为例:#!/bin/sh#### /etc/rc.d/init.d/supervisord###supervisor is a client/server system that# allows its users to monitor and control a# number of processes on UNIX-like operating# systems.## chkconfig: - 6436# description: Supervisor Server# processname: supervisord# Source init functions. /etc/rc.d/init.d/functionsprog="supervisord"prefix="/usr/"exec_prefix="${prefix}"PIDFILE="/var/run/supervisord.pid"CONFIG="/etc/supervisord.conf"prog_bin="${exec_prefix}bin/supervisord -c $CONFIG "function log_success_msg() {echo"$@""[ OK ]"}function log_failure_msg() {echo"$@""[ OK ]"}start(){#echo -n $"Starting $prog: "#daemon $prog_bin --pidfile $PIDFILE#[ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog failed"#echoif [ ! -r $CONFIG ]; thenlog_failure_msg "config file doesn't exist (or you don't have permission to view)"exit 4fiif [ -e $PIDFILE ]; thenPID="$(pgrep -f $PIDFILE)"if test -n "$PID" && kill -0"$PID" &>/dev/null; then# If the status is SUCCESS then don't need to start again.log_failure_msg "$NAME process is running"exit 0fifilog_success_msg "Starting the process""$prog"daemon $prog_bin --pidfile $PIDFILElog_success_msg "$prog process was started"}stop(){echo -n $"Shutting down $prog: "[ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"echo}case"$1"instart)start;;stop)stop;;status)status $prog;;restart)stopstart;;*)echo"Usage: $0 {start|stop|restart|status}";;esacView Code第1步:把上⾯的脚本放在/etc/init.d/⽂件夹下。

计算机及Linux操作系统开机启动过程详解

计算机及Linux操作系统开机启动过程详解

计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。

执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。

执⾏该跳转(⼆跳)。

阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。

执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。

执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。

具体过程见下⽂“操作系统启动过程”部分。

整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。

BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。

启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。

往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。

若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。

可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。

因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。

Linux操作系统启动流程图文详解

Linux操作系统启动流程图文详解

Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。

上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。

加载完BIOS信息,计算机将根据顺序进⾏启动。

2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。

被复制到物理内存的内容是Boot Loader,然后进⾏引导。

3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。

4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。

5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。

简要分析linux系统的启动过程

简要分析linux系统的启动过程

简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。

2)读取MBR,进⾏MBR引导。

3)grub引导菜单(Boot Loader)。

4)加载内核kernel。

5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。

7)启动内核模块,执⾏不同级别的脚本程序。

8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。

linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。

下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。

[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。

linux-start

linux-start

/etc/rc.d/rc.sysinit
主要做在各个运行模式中相同的初始化工作,包括: ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢
调入keymap以及系统字体 启动swapping 设置主机名 设置NIS域名 检查(fsck)并mount文件系统 打开quota 装载声卡模块 设置系统时钟 等等。

/etc/rc.d/rc
可以设置)来执行相应目录下的脚本。凡是以Kxx开头的 , 都以stop为参数来调用;凡是以Sxx开头的,都以start为参 数来调用。调用的顺序按xx 假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调 用
➢ /etc/rc.d/rc3.d/下的脚本。 ➢ linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为
# 0 - 停机(千万不能把initdefault 设置为0 ) # 1 - 单用户模式
# # # # # #
s 2 3 4 5 6
-
init s = init 1 多用户,没有 NFS 完全多用户模式(标准的运行级) 没有用到 X11 多用户图形模式(xwindow) 重新启动(千万不要把initdefault设置为6 )
Linux开机流程
1
linux开机顺序总览
启动方式和执行 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 ➢ /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模 式 ➢ /etc/rc.d/rc.local #相应级别服务启动之后、 在执 行该文件(其实也可以把需要执行的命令写到该文件 中) /sbin/mingetty # 等待用户登录
chkconfig(续)

Linux实现脚本开机自启动

Linux实现脚本开机自启动

Linux实现脚本开机⾃启动参考链接:Ubuntu系统实现脚本开机⾃启动0、序⾔ 很多时候,我们使⽤Linux时,为了⽅便操作,需要⽤到⼀些⾃启动的脚本,对于不同的Linux系统来说,⾃启动⽅式各有不同,我这⾥记录的是Ubuntu 20.0系统的;⽂章后⾯会补充参考链接的博客部分内容,仅供参考学习使⽤。

该⽅法也可以⽤在移植系统时,把开机启动服务移植进去。

在 Ubuntu 16以前,有个很简单的 rc.local ,在这个⽂件内写上你要执⾏的命令,在开机后,系统就会以管理员权限去执⾏这些命令。

但是,这个启动脚本的控制粒度并不是很精细。

所以,在Ubuntu18 版本开始,Ubuntu使⽤了 systemd 替代了 initd 管理系统。

并且默认已经取消了 /etc/rc.local ⽂件,如果要在 Ubuntu16 以后使⽤ rc.local 这个⽅法,可以参考我i另⼀篇博⽂:。

1、建⽴开机启动服务 跳转到/etc/systemd/system⽂件夹,移植系统时也是到你的⽂件系统的这个⽂件夹; 新建开机启动服务sudo vim my_start.service[Unit]#该⽂件是⾃⼰建⽴的启动服务⽂件,#/bin/my_start.sh 是你要启动的脚本所在的路径以及⽂件名,其他保持默认格式即可Description=/bin/my_start.sh CompatibilityConditionPathExists=/bin/my_start.s h[Service]Type=forkingExecStart=/bin/my_start.shTimeoutSec=0StandardOutput=ttyRemainAfterExit=yesSysVStartPriority=99[Install]WantedBy=multi-user.target 给启动服务添加权限sudo chmod 777 my_start.service2、创建要⾃启动的脚本 因为我在第⼀步的启动服务⾥声明的启动脚本路径以及名称,所以建⽴的启动脚本名称路径要跟启动服务⾥声明的⼀致;跳转到启动服务⾥声明的/bin⽬录,添加启动脚本vim my_start.sh#!/bin/sh#该⽂件为⾃定义开机启动脚本,可以⽤该脚本执⾏⼀些你需要开机启动的脚本PASSWORD="your_password"#你如果做系统移植时,可以把 roo t的密码参数设置为 export,然后这⾥设置为 PASSWORD=${ROOT_PASSWORD},就是直接提取你的 root 密码#具体你的系统保持密码的参数是什么要看你的移植的系统了,我的是 ROOT_PASSWORDecho ${PASSWORD} | sudo -S /bin/myStart/set_net_core.sh #echo ${PASSWORD} | sudo -S 是实现脚本⾃动把执⾏sudo命令时要输⼊的密码输⼊进去#我在这⾥的脚本实现的是:启动 /bin/myStart ⽂件夹⾥的 set_net_core.sh 脚本#这种⽅法的好处就是我只需要做⼀个启动服务专门⽤来执⾏⼀个脚本去执⾏其他脚本,这样后续还有新的需要开机⾃启动脚本就只需要把执⾏命令写⼊到这⾥即可 给启动脚本添加权限 sudo chmod 777 my_start.sh3、启动脚本⾃启动服务 跳转到/etc/systemd/system⽂件夹,其实不进⼊也⾏,我这⾥为了加深记忆才重新进⼊⼀次;执⾏指令sudo systemctl enable my_start.service启动脚本⾃启动服务,然后使⽤指令reboot重启你的系统; 如果你是做系统移植需要⽤到的,你需要移植完系统,烧录后执⾏⼀次该指令,只需要执⾏⼀次即可,后续你断电关机重启都不⽤执⾏了。

linux下添加简单的开机自启动脚本

linux下添加简单的开机自启动脚本

linux下添加简单的开机⾃启动脚本在linux的使⽤过程中,我们经常会碰到需要将某个⾃定义的应⽤程序设置为开机⾃启动以节省操作时间,这⾥提供两个设置开机⾃启动的⽅法。

注:博主使⽤的ubuntu-16.04进⾏实验,其它版本可能有偏差,但实现原理类似。

rc.local在rc.local脚本中添加开机⾃启动程序ubuntu在开机过程之后,会执⾏/etc/rc.local(注意/etc/init.d中也有个rc.local,不要弄混了)⽂件中的脚本程序,初始情况下,这个⽂件内容是这样的:downey@ubuntu:~$ cat /etc/rc.local#!/bin/sh -e## rc.local## This script is executed at the end of each multiuser runlevel.# Make sure that the script will "exit 0" on success or any other# value on error.## In order to enable or disable this script just change the execution# bits.## By default this script does nothing.并不包含其它内容,⽤户可以在⾥⾯添加需要开机执⾏的脚本命令,这⾥以diodon粘贴板⼯具为例,如果我要开机运⾏diodon进程,在⽂本中添加:downey@ubuntu:~$ cat /etc/rc.local#!/bin/sh -e## rc.local## This script is executed at the end of each multiuser runlevel.# Make sure that the script will "exit 0" on success or any other# value on error.## In order to enable or disable this script just change the execution# bits.## By default this script does nothing../usr/bin/diodon &exit 0看到这⾥有些盆友就要问了,为什么要在执⾏命令后⾯加&?在shell执⾏命令后加&是为了让应⽤程序在后台运⾏,rc.local也是⼀个脚本,主进程在运⾏这个脚本时必须能够返回,如果在这个脚本⾥⾯执⾏了⼀些死循环或者其他⽆法返回的任务,整个系统就很可能卡死在这⾥,⽆法启动,所以在这⾥运⾏的⽤户程序必须是能够返回或者本⾝就使⽤⼀些后台运⾏的进程。

CentOS系列--linux启动顺序

CentOS系列--linux启动顺序

系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。

内核被加载到内存中之后,就开始执行了。

一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。

从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。

内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。

系统首先启动init进程,该进程先会执行/etc/rc.d/rc.sysinit,然后去读/etc/inittab文件决定运行模式,根据默认运行模式读取/etc/rc.d/rc $RUNLEVEL文件夹下的执行程序连接,这些文件以K或S开头,它们都是指向init.d/的一些软连接。

Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。

init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。

它决定了系统启动之后运行于什么级别。

运行级别决定了系统启动的绝大部分行为和目的。

这个级别从0到6 ,具有不同的功能。

不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)rc.d的内容如下:init.d/ :各种服务器和程序的二进制文件存放目录。

rc $RUNLEVEL.d/: 各个启动级别的执行程序连接目录。

里头的东西都是指向init.d/的一些软连接。

具体的后边叙述。

还有三个脚本:rc.sysinit, rc, rc.local如图:redhat的启动方式和执行次序是:加载内核执行init程序/etc/rc.d/rc.sysinit # 由init执行的第一个脚本/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式/etc/rc.d/rc.local/sbin/mingetty # 等待用户登录在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:调入keymap以及系统字体启动swapping设置主机名设置NIS域名检查(fsck)并mount文件系统打开quota装载声卡模块设置系统时钟等等。

linux启动流程

linux启动流程

centos6启动流程•硬件启动阶段o Power on打开电源o BIOS▪POST: power on self test开机自检•初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等▪确定启动设备•启动设备:硬盘、网络、U盘、光盘•如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节•控制权交给bootloadero MBR▪MBR512字节• 1.446字节bootloadero启动加载器bootloader▪windows: ntloader仅仅启动os▪GRUB: GRand Unified Bootloader,CentOS 6 GRUB 0.97: GRUBLegacy, CentOS 7 以后使用GRUB 2.02• 2.64字节分区信息o16字节x4 partitions• 3.55aa标志位表示分区是否有效•grub启动阶段o stage1▪ 1.446字节bootloader•这是二进制的0101,写在MBR扇区的前446字节。

o单纯为了找到1.5阶段生成的bootloader上o stage1.5▪第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统来读取config文件加载内核。

MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfsext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader▪ 1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux开机启动脚本的顺序
如果服务器重启之后需要手工开启许多服务、工作及以后的维护相对比较繁琐、特地总结了下linux下开机自动启动脚本所涉及的知识和方法、如下:
1、相关基础知识点
1)redhat的启动方式和执行次序是:
加载内核
执行init程序
/etc/rc.d/rc.sysinit # 由init执行的第一个脚本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式
/etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)
/sbin/mingetty # 等待用户登录
在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:
调入keymap以及系统字体
启动swapping
设置主机名
设置NIS域名
检查(fsck)并mount文件系统
打开quota
装载声卡模块
设置系统时钟
等等。

/etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。

凡是以Kxx开头的
,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。

调用的顺序按xx
从小到大来执行。

(其中xx是数字、表示的是启动顺序)例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用
/etc/rc.d/rc3.d/下的脚本。

值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中
的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。

init在等待/etc/rc.d/rc执行完毕之后(因为在/etc/inittab中/etc/rc.d/rc的
action是wait),将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。

至此,LINUX的启动结束。

2)init运行级别及指令
一、什么是INIT:
init是Linux系统操作中不可缺少的程序之一。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。

所以,init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。

如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

二、运行级别
那么,到底什么是运行级呢?
简单的说,运行级就是操作系统当前正在运行的功能级别。

这个级别从1到6 ,具有不同的功能。

不同的运行级定义如下
# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式# s init s = init 1
# 2 - 多用户,没有NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 多用户图形模式(xwindow)
# 6 - 重新启动(千万不要把initdefault 设置为6 )
这些级别在/etc/inittab 文件里指定。

这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。

在大多数的Linux 发行版本中,启动脚本都是位于/etc/rc.d/init.d中的。

这些脚本被用ln 命令连接到/etc/rc.d/rcn.d 目录。

(这里的n 就是运行级0-6)
3):chkconfig 命令(redhat 操作系统下)
不像DOS 或者Windows,Linux 可以有多种运行级。

常见的就是多用户的
2,3,4,5 ,很多人知道5 是运行X-Windows 的级别,而0 就是关机了。

运行级的改变可以通过init 命令来切换。

例如,假设你要维护系统进入单用户状态,那么,可以使用init 1 来切换。

在Linux 的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K 和S 开头的文件,按后面的数字顺序,执行这些脚本。

对这些脚本的维护,是很繁琐的一件事情,Linux 提供了chkconfig 命令用来更新和查询不同运行级上的系统服务。

语法为:
chkconfig --list [name]
chkconfig --add name
chkconfig --del name
chkconfig [--level levels] name
chkconfig [--level levels] name
chkconfig 有五项功能:添加服务,删除服务,列表服务,改变启动信息以及检查特定服务的启动状态。

chkconfig 没有参数运行时,显示用法。

如果加上服务名,那么就检查这个服务是否在当前运行级启动。

如果是,返回true,否则返回 false。

--level 选项可以指定要
查看的运行级而不一定是当前运行级。

如果在服务名后面指定了on,off 或者reset,那么chkconfig 会改变指定服务的启动信息。

on 和off 分别指服务在改变运行级时的启动和停止。

reset 指初始化服务信息,无论有问题的初始化脚本指定了什么。

对于on 和off 开关,系统默认只对运行级3,4,5有效,但是reset 可以对所有运行级有效。

指定--level 选项时,可以选择特定的运行级。

需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。

当切换运行级时,init 不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

选项介绍:
--level levels
指定运行级,由数字0 到7 构成的字符串,如:
--level 35 表示指定运行级3 和5。

要在运行级别3、4、5中停运nfs 服务,使用下面的命令:chkconfig --level 345 nfs off
--add name
这个选项增加一项新的服务,chkconfig 确保每个运行级有一项启动(S) 或者杀死(K) 入口。

如有缺少,则会从缺省的init 脚本自动建立。

--del name
用来删除服务,并把相关符号连接从/etc/rc[0-6].d 删除。

--list name
列表,如果指定了name 那么只是显示指定的服务名,否则,列出全部服务在不同运行级的状态。

运行级文件
每个被chkconfig 管理的服务需要在对应的init.d 下的脚本加上两行或者更多行的注释。

第一行告诉chkconfig 缺省启动的运行级以及启动和停止的优先级。

如果某服务缺省不在任何运行级启动,那么使用- 代替运行级。

第二行对服务进行描述,可以用跨行注释。

例如,random.init 包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for
# higher quality random number generation.
表明random 脚本应该在运行级2, 3, 4, 5 启动,启动优先权为20,停止优先权为80。

好了,介绍就到这里了,去看看自己目录下的/etc/rc.d/init.d 下的脚本吧。

设置自启动服务:chkconfig --level 345 nfs on
2. 实例介绍:
1、在linux下安装了apache 服务(通过下载二进制文件经济编译安装、而非rpm包)、apache 服务启动命令: /server/apache/bin/apachectl start 。

让apache服务运行在运行级别3下面。

命令如下:
1)touch /etc/rc.d/init.d/apache
vi /etc/rc.d/init.d/apache
chown -R root /etc/rc.d/init.d/apache
chmod 700 /etc/rc.d/init.d/apache
ln -s /etc/rc.d/init.d/apache /etc/rc.d/rc3.d/S60apache #S 是start的简写、代表启动、K是kill的简写、代表关闭。

60数字代表启动的顺序。

(对于iptv 系统而言、许多服务都是建立在数据库启动的前提下才能够正常启动的、可以通过该数字就行调整脚本的启动顺序))
apache的内容:
#!/bin/bash
#Start httpd service
/server/apache/bin/apachectl start
至此apache服务就可以在运行级别3下随机自动启动了。

(可以结合chkconfig 对启动服务进行相应的调整)。

相关文档
最新文档