一、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