Linux中启动进程的方法有哪些?哪种更好用?

Linux中启动进程的方法有哪些?哪种更好用?,第1张

Linux手工启动进程

手工启动进程指的是由用户输入命令直接启动一个进程,根据所启动的进程类型和性质不同,又细分为前台启动和后台启动两种。

前台启动进程

这是手工启动进程最常用的方式,因为当时输入一个命令并运行,就已经启动了一个进程,而且是一个前台的进程,此时系统其实已经处于一个多进程的状态,一个是shell进程,另一个是新启动的进程。

实际上,系统自动时就有许多进程悄悄地在后台运行,不过为了方便阅读,并没有将这些进程包括在内。

假如启动一个比较耗时的进程,然后再把该进程挂起,并使用ps命令查看,就会看到该进程在PS显示列表中。将进程挂起,指的是将前台运行的进程放到后台,并且暂停其运行。

后台启动进程

进程直接从后台运行,用的相对比较少,除非该进程非常耗时,且用户也不急着需要其运行结果的时候,例如,用户需要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个shell在格式化过程中都处于被占用状态,从后台启动这个进程是比较明智的选择。

从后台启动进程,其实就是在命令结尾处添加一个&符号。输入命令并运行之后,shell会提供给我们一个数字,此数字就是该进程的进程号。然后直接就会出现提示符,用户就可以继续完成其他工作。

手工启动的2种方式,实际上它们有个共同的特点,就是新进程都是由当前shell这个进程产生的,换句话说,是shell创建了新进程,于是称这种关系为进程间的父子关系,其中shell是父进程,新进程是子进程。

且一个父进程可以有多个子进程,通常子进程结束后才能继续父进程当然,如果是从后台启动,父进程就不用等待子进程了。

Linux调度启动进程

在Linux系统中,任务可以被配置在指定的时间、日期或者系统平均负载量低于指定值时自动启动。

例如,Linux预配置了重要系统任务的运行,以便可以使系统能够实时被更新,系统管理员也可以使用自动化的任务来定期对重要数据进行备份。

实现调度启动进程的方法有很多,比如通过crontab、cat等命令。

        本文主要针对CenOS6系统的启动流程作简介。

         Linux的系统启动分为几个阶段,由于运行中的系统分为用户空间层面和内核空间层面,所以一个完整的系统启动也是先启动内核文件,然后在启动用户层面的各种应用程序。Linux系统的设计属于单内核设计,但是各功能模块却支持动态的装载和卸载,极大的压缩了内核的体积,让内核的启动也更加快捷和迅速。

过程简述:

1.POST(加电自检) :主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。

2.boot sequence(选择启动设备) :按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备;

上述两个功能都由BIOS来完成,BIOS(Basic Input / Output System),又称基本输入输出系统,是一个固化在ROM中的软件,是 *** 作系统输入输出管理系统的一部分。

3.bootloader(引导加载器):

Linux下的引导加载器有grub leancy和grub2两种,Cenos6中使用的是前者。

MBR(主引导记录):

MBR的共由512字节组成,前446字节存放的即是bootloader。所以在选定启动设备后,收件是读取MBR中的bootloader,打开grub菜单。

grub:

功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;

gurb的实现共有3个阶段:

1st stage:位于MBR的BootLoader中,用来加载2nd stage到内存中。

1.5  stage:1和2的桥梁,用来驱动文件系统来使1阶段过渡到2阶段。

2nd stage:grub核心,/boot/grub,存放在磁盘分上,用于加载内核文件。

4.加载内核

分四个步骤:

探测可识别到的所有硬件设备;

加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

以只读方式挂载根文件系统;即rootfs

运行用户空间的第一个应用程序:/sbin/init。

内核文件:/boot//vmlinuz-VERSION-release,ramdisk文件/boot/initramfs-VERSION-release.img。

        在上述的内核启动后,后续的 *** 作都交给init程序来完成。/sbin/init程序是用户空间的第一个程序,主要完成系统初始化,步骤如下:

设置默认运行级别:

         运行级别的配置文件为/etc/inittab,共0-6七个运行级别,可以在该文件中自主定义,下次启动默认进入指定的运行级别。

 运行系统初始化脚本:

        /etc/rc.d/rc.sysinit即为系统的初始化脚本,系统通过自动执行该脚本,从而完成对系统的设置和信息的初始化。

关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务:

        这里主要是指通过chkconfig所配置的开机自动启动或者关闭的各类服务。

设置登录终端:

 启动图形终端:级别5需要启动

GRand Unified Bootloader,系统启动后会首先打开一个grub菜单,上图所示,可以自主选择内核、定制内核参数。grub由三个阶段组成,1st stage,1_5stage以及stage2,stage2和内核文件等通常放置于一个基本磁盘分区。

grub有自己的命令行接口:

配置文件说明:/boot/grub/grub.conf

kickstart是什么

        许多系统管理员愿意使用自动化的安装方法来安装linux系统。为了满足这种需要,红帽公司建立了kickstart安装方法。使用kickstart自动化安装,系统管理员可以创建一个ks文件,该文件包含了在典型的安装过程中所遇到的问题的答案。

        Kickstart文件可以存放在一个固定的位置上,在安装过程中被独立的机器所读取。这个安装方法可以支持使用单一kickstart文件在多台机器上安装Linux系统,这对于网络和系统管理员来说是个理想的选择。

如何执行kickstart安装

        kickstart 安装可以使用本地光盘,本地硬盘驱动器,或通过 NFS、FTP、HTTP 来执行。

        要使用 kickstart,必须:

                1.创建一个正确的kickstart文件。

                2.创建有kickstart文件的引导介质或者让主机可以通过网络访问该文件。

                3.筹备安装过程。

                4.开始kickstart安装。

创建kickstart配置文件的方式:

   1.  文本编辑器编辑生成:vim

   2. 用图形化界面配置:system-config-kickstat(需要安装system-config-kickstart.noarch包)

步骤:

创建光盘根目录

复制光盘下的isolinux目录到根目录下

赋予isolinux里的所有文件和目录写权限(这样就可以自定义isolinux.cfg文件)

复制修改好的ks文件到myboot目录下(这里myboot目录相当于光盘的根目录)

建立镜像

很多时候,我们需要将一些服务在Linux系统启动时即自动运行,省得每次都要去手动启动一遍,如Redis, MySQL, Nginx等。本文对CentOS与Ubuntu下开机自启动的配置方法进行整理,供参考查阅。

rc.local是CentOS以前版本的方式,在CentOS7中仍然以兼容的形式存在,虽仍可用,但不推荐(推荐使用systemd service)。

1、编写需要开机自启动的脚本,并添加执行权限

作为测试,上述脚本打印一个时间到/tmp/test.log文件中

2、在/etc/rc.d/rc.local配置文件中添加脚本运行命令(使用绝对路径)

3、添加/etc/rc.d/rc.local文件的执行权限

在centos7中,/etc/rc.d/rc.local没有执行权限,需要手动授权

以上三步,即可使/root/test_rclocal.sh >/dev/null 2>/dev/null 命令在服务器系统启动时自动运行。

1、编写需要开机自启动的测试脚本,并添加执行权限

2、在/etc/rc.d/init.d/目录下添加一个可执行脚本testchkconfig

上述testchkconfig脚本的头部必须遵循一定的格式 # chkconfig: 2345 90 10, 其中2345指定服务在哪些执行等级中开启或关闭,90表示启动的优先级(0-100,越大优先级越低),10表示关闭的优先级。执行等级包括

3、加入开机启动服务列表

使用 chkconfig --list 可查看当前加入开机自启动的服务列表,但如Note部分所述,该命令只显示SysV服务,不包含原生的systemd服务,查看systemd服务可使用systemctl list-unit-files命令。

以上三步,即可使/root/test_chkconfig.sh >/dev/null 2>/dev/null 命令在服务器系统启动时自动运行。

chkconfig的其它命令参考

CentOS7的systemd服务脚本存放在:/usr/lib/systemd/system(系统级)/usr/lib/systemd/user(用户级)下,以.service结尾。这里以nginx为例

1、在/usr/lib/systemd/system目录下创建nginx.service文件

其中Service部分的Type包括如下几种类型:

2、 开启开机自启动

以上两步,就将nginx服务配置成了在 *** 作系统启动时自动启动。

其它命令参考

从字面看是PID文件不可读,查看/var/run/nginx.pid,该文件也确实不存在,查看nginx.conf配置文件,发现是pid /var/run/nginx.pid这行配置被注释掉了, 如果不指定pid文件位置,nginx默认会把pid文件保存在logs目录中。所以出现systemd启动服务时找不到pid文件而报错,将nginx.conf中的pid配置注释去掉,重启nginx.service即可。

在Ubuntu18.04中,主要也是以systemd服务来实现开机自启动,systemd默认读取/etc/systemd/system/下的配置文件,该目录下的一些文件会链接到/lib/systemd/system/下的文件。

因此可以在/etc/systemd/system/目录下面创建一个自启动服务配置,以内网穿透服务frp客户端为例,如

各配置项与CentOS类似。然后将服务器加到自启动列表中并启动服务

其它更多systemctl命令与CentOS类似。

也可以使用/lib/systemd/system/rc-local.service来执行一些开机需要执行的脚本,该文件内容为

从Description看它是为了兼容之前版本的/etc/rc.local的,该服务启动命名就是/etc/rc.local start,将该文件链接到/etc/systemd/system下

创建/etc/rc.local文件,并赋予可执行权限

作者:半路雨歌

链接:https://juejin.cn/post/6844904104515338248


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8892491.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存