一、Linux启动流程
1、Centos 6.x启动流程图解
2、Centos 6.x和CentOS 7.x启动流程对比图解
3、运行级别
linux系统下有七个运行级别
运行级别 | systemd目标名称 | 作用 |
0 | runlevel0.target,poweroff.target | 关机 |
1 | runlevel1.target,rescue.target | 单用户模式 |
2 | runlevel2.target,multi-user.target | 暂未使用 |
3 | runlevel3.target,multi-user.target | 多用户的文本界面 |
4 | runlevel4.target,multi-user.target | 没有使用 |
5 | runlevel5.target,graphical.target | 多用户的图形界面 |
6 | runlevel6.target,reboot.target | 重启 |
# 查看系统默认的运行级别
[root@192 ~]# ls /usr/lib/systemd/system/runlevel*
# 查看系统默认的运行级别
[root@192 ~]# systemctl get-default
graphical.target
# 查看正在运行的级别
[root@192 ~]# runlevel
N 3
# 设置默认运行级别
[root@192 ~]# systemctl set-default graphical.target #切换图形界面
二、Linux systemd
1、概述
linux存在问题:linux一直都是采用init进程作为祖宗进程,init进程由于是串行启动,所以存在启动时间长,启动脚本复杂,导致启动速度很慢,直到centos 7换成并行启动。
systemd:system daemon守护进程,主要是解决linux系统init进程存在的问题,目标就是为系统启动和管理提供一套完整的解决方案,目前最新系统都采用了systemd管理(RedHat7,CentOS7,Ubuntu15等)
优势(以Centos 7为例):1、并行启动服务,显著提高开机效率;2、关机只关闭正在运行的服务,不会像CentOS6那样把服务全部都关闭一次;3、服务启动和停止不再使用脚本进行管理,也就是/etc/init.d下不再有脚本;4、解决原有模式缺陷,比如:原有service不会关闭程序产生的子进程。
2、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、systemd管理服务命令
#systemctl常用命令
'''
systemctl start crond.service # 启动服务
systemctl stop crond.service # 启动服务
systemctl restart crond.service # 重启服务
systemctl reload crond.service # 重新加载配置
systemctl status crond.service # 查看服务运行状态
systemctl is-active sshd.service # 查看服务是否在运行中
systemctl mask crond.service # 禁止服务运行
systemctl unmask crond.service # 取消禁止服务运行
systemctl cat vsftpd # 查看启动文件
'''
# systemctl status 服务名称/crond.service查看服务状态
[root@192 ~]# systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-01-15 20:18:28 CST; 2h 49min ago
Main PID: 538 (crond)
CGroup: /system.slice/crond.service
└─538 /usr/sbin/crond -n
'''
loaded #服务单元的配置文件已经被处理
active(running) #服务持续运行
active(exited) #服务成功完成一次的配置
active(waiting) #服务已经完成但在等到某个事件
inactive #服务没有在运行
enabled #服务设定为开机运行
disabled #服务设定为开机不允许
static #服务开机不启动,但是可以配其他服务调用启动
'''
1、systemctl服务开机启动、不启动等命令
systemctl enable crond.service #开机自动启动
systemctl disable crond.service #开机不自动启动
systemctl list-unit-files #查看各个级别下服务的启动与禁用
systemctl is-enabled crond.service #查看特定服务是否为开机自启动
systemctl daemon-reload #创建新服务文件需要重载变更
2、关机、重启、日志命令
systemctl poweroff #立即关机
systemctl reboot #重启命令
#--------------日志有关命令--------------
journalctl -n 20 #查看日志最后20行
journalctl -f #动态查看日志
journalctl -p err #查看日志的级别
journalctl -u crond #查看某个服务的单元的日志
journalctl -xe #排查问题日志
'''
-xe是排查问题时最常用的参数:
-e 从结尾开始看
-x 相关目录(如:问题相关的网址)
'''
3、centos6、centos7启动服务
#1 centos6 上启动服务:service start network
#2 centos7 启动服务:systemctl start network
4、制作系统服务
#1、切换到system目录下
cd /usr/lib/systemd/system/
#2、创建一个conf文件,内容模板如下:
[Unit]
Description=Vsftpd ftp daemon # 描述
After=network.target # 在XX后启动
[Service]
Type=forking # 程序后台运行
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf # 命令
# ExecStartPre 启动之前执行
# ExecStop 停止
# ExecRestart 重启
# ExecReload 重新加载
[Install]
WantedBy=multi-user.target # 在哪个运行级别下
#例子:制作nginx服务
[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
# 启动服务
systemctl start mynginx.service
# 查看服务状态:
systemctl status mynginx.service
# 开机自启动
systemctl enable mynginx
# 取消开机自启动
systemctl disable mynginx.service