Linux系统服务
1 Linux启动流程
# centos6 上启动服务:service start network(服务名)
# centos7 上启动服务:systemctl start network
# centos6开机加载完内核后--->启动init进程(第一个进程,id号永远为1)
# centos7开机加载完内核后--->启动systemd进程(第一个进程,id号永远为1)
# 因此centos6和centos7,启动服务的命令不同
2 Linux运行级别
2.1 什么是运行级别,运行级别就是操作系统当前正在运行的功能级别
2.2 如何调整系统启动的运行级别?systemd使用’targets’而不是runlevels。默认情况下,有两个主要目标:
multi-user.target:类似于运行级别3
graphical.target: 类似于运行级别5
#1.查看系统默认运行级别
# ls /usr/lib/systemd/system/runlevel*
[root@student ~]# runlevel(6,7通用)
[root@student ~]# systemctl get-default
#2.要设置默认目标,请运行
[root@student ~]# systemctl set-default graphical.target # 切换图形界面
[root@student ~]# systemctl set-default multi-user.target # 切换命令界面
3 Linux systemd
3.1 systemd的由来
Linux一直以来都是采用init进程作为祖宗进程,但是init有两个缺点:
1、启动时间长。Init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
2、启动脚本复杂,初始化完成后系统会加载很多脚本,脚本都会处理各自的情况,这会让脚本多而复杂。
Centos5 是启动速度最慢的,串行启动过程,无论进程相互之间有无依赖关系。
Centos6 相对启动速度有所改进。有依赖的进程之间依次启动而其他与之没有依赖关系的则并行同步启动。
Centos7 所有进程无论有无依赖关系则都是并行启动(当然很多时候进程没有真正启动而是只有一个信号或者说是标记而已,在真正利用的时候才会真正启动。)
3.2 什么是systemd
systemd即为system daemon守护进程,systemd主要解决上文的问题而诞生,systemd的目标是,为系统的启动和管理提供一套完整的解决方案。
3.3 systemd的优势
1、最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15等)
2、Centos7支持开机并行启动服务,显著提高开机启动效率。
3、Centos7关机只关闭正在运行的服务,而Centos6全部都关闭一次。
4、Centos7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。
5、Centos7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。
3.3 systemd相关配置文件
/usr/lib/systemd/system/ #类似Centos6系统的启动脚本,/etc/init.d/
/etc/systemd/system/ #类似Centos6系统的/etc/rc.d/rcN.d/
/etc/systemd/system/multi-user.target.wants/,开机要启动的程序
3.4 systemd管理服务相关命令
systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
当我们使用systemctl启动一个守护进程后,可以通过sysytemctl status查看此守护进程的状态
systemctl 设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
CentOS7系统, 管理员可以使用 systemctl 命令来管理服务器启动与停止
#关机相关命令
systemctl poweroff #立即关机,常用
#重启相关命令
systemctl reboot #重启命令,常用
systemctl的journalctl日志
journalctl -n 20 #查看最后20行
journalctl -f #动态查看日志
journalctl -p err #查看日志的级别
journalctl -u crond #查看某个服务的单元的日志
# journalctl -xe
# systemctl status nginx -l
systemcltl 其他
### 1 centos6 中启动服务,centos7启动服务
/etc/init.d/network restart
service network restart #(只会干掉父进程,不会关掉子进程)
# centos7启动服务
systemctl restart network # 所有服务都放在/usr/lib/systemd/system/
####2 制作系统服务(nginx为例)
# 要用systemctl管理,需要在/usr/lib/systemd/system/路径下,建一个 服务名.service的文件
# /usr/lib/systemd/system/vsftpd.service
[Unit]
Description=Vsftpd ftp daemon # 描述服务
After=network.target # 在哪个服务启动后启动
[Service]
Type=forking # 程序后台运行
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf # 启动命令
# ExecStartPre 启动之前执行
# ExecStop 停止
# ExecRestart 重启
# ExecReload 重新加载
[Install]
WantedBy=multi-user.target # 在哪个运行级别下运行服务,默认用3
####3 制作系统服务
# cd /usr/lib/systemd/system/
# vim mynginx.service
[Unit]
Description=my nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecRestart=/usr/local/nginx/sbin/nginx -s restart
ExecReload=/usr/local/nginx/sbin/nginx -s reload
[Install]
WantedBy=multi-user.target # 在哪个运行级别下
# chmod 754 mynginx.service
# systemctl start mynginx # 启动nginx
# systemctl enable mynginx.service # 设置开机启动
# systemctl status mynginx.service # 查看服务状态, # disabled表示没有开机自启动
# systemctl disable mynginx.service # 取消开机启动
4 Linux单用户模式
如何使用单用户模式进行变更系统密码?以Centos7系统为例:(Centos6破解方式请自行百度)
第1步:重启Linux系统主机并出现引导界面时,按下键盘上的e键进入内核编辑界面
第2步:在linux16这行的后面添加enforcing=0 init=/bin/bash
,然后按下Ctrl + X组合键来运行修改过的内核程序
第3步:大约5秒过后,进入到系统的单用户模式,依次输入以下命令,等待系统重启操作完毕,然后就可以使用新密码来登录Linux系统了。命令行执行效果如图所示。
5 Linux下救援模式
场景一:当系统坏了,无法登陆系统,但需要把里面的数据复制出来,怎么办?
步骤一、先挂载光盘,然后选择光盘引导为第一位
步骤二、进入故障排除模式–>然后选择救援模式
步骤三、挂载真实系统后,发现数据都还存在
场景二、修复MBR,主要出现在安装双系统时,后安装的系统把原来系统的MBR删除了,需要修复。
步骤一、破坏硬盘的前446字节,模拟MBR引号损坏,会发现重启无法启动系统
[ ]
步骤二、重启系统,然后按照之前的操作进入救援模式,然后分配一个shell终端,挂载真实的操作系统进行修复
步骤三、修复MBR引导,然后重启连接服务器
#1.使用grub修复
# grub2-install /dev/sda
#2.然后退出
# exit
#3.最后重启进入系统
# reboot
场景三、Centos7误删除grub文件如何进行修复。
步骤一、模拟误删故障
#1.删除grub2
[root@m01 ~]# rm -rf /boot/grub2
#2.重启计算机
[root@m01 ~]# reboot
步骤二、重启系统,然后按照之前的操作进入救援模式,然后分配一个shell终端,挂载真实的操作系统进行修复
步骤三、使用grub2-install、grub2-mkconfig恢复配置文件
PS: 最后别忘记修改 BIOS 引导,让硬盘回归到第一引导