成功的网站建设,江苏网站建设教程,做网站去什么公司好,李守洪排名大师怎么样daemon与service
达成某个服务#xff08;service#xff09;需要一个守护进程#xff08;daemon#xff09;在后台运行。
实现 ssh 服务#xff0c;需要 sshd 这个守护进程实现 mysql 服务#xff0c;需要 mysqld 这个守护进程实现 cron 服务#xff0c;需要 crond 这…daemon与service
达成某个服务service需要一个守护进程daemon在后台运行。
实现 ssh 服务需要 sshd 这个守护进程实现 mysql 服务需要 mysqld 这个守护进程实现 cron 服务需要 crond 这个守护进程
daemon守护进程通常在service服务的名称后加上一个d
init管理下daemon的主要分类
开机过程中系统核心第一支呼叫的程序是 init然后 init 唤起所有的系统所需的服务。
所有服务的启动脚本都放在 /etc/init.d/ 目录下
启动、关闭、查看服务
启动/etc/init.d/服务名 start
停止/etc/init.d/服务名 stop
重启/etc/init.d/服务名 restart
查看/etc/init.d/服务名 status
服务启动分类
根据服务是独立启动或被一支总管程序管理分为两类
独立启动stand alone服务独立启动该服务直接常驻内存为本机或用户提供服务反应速度快。
总管程序super daemon由特殊的xinetd或inetd这两个总管程序提供socket对应或port对应的管理。当没有用户需求某socket或port时所需要的服务不会被启动当有用户需求时xinetd会去唤醒对应的服务程序当需求结束时被唤醒的服务也会被结束。反应稍慢。
服务相依性
init在管理员手动处理服务时无法唤醒相依的服务
启动级别
共7个等级
0级是Linux系统最低和最重要的级别它表示关机是关机模式一般是系统重启或者停止时使用。1级是进入系统修复模式一般用于系统出现故障时调试使用。分为单用户模式和多用户模式两种情况在单用户模式下进行一些系统检测、修复工作在多用户模式下开启系统的基本服务。2级是Linux系统的正常运行状态一般用于在非安全网络环境中使用开启常规的系统服务。3级纯文本模式用户级它开启了X Window系统服务一般用于安全的网络环境中。能够实现X Window系统的图像化操作可以完成网络连接、文件传输和输入/输出工作等。4级为保留状态方便用户在图形化环境下改变服务的起停状态这种级别并不是必须的可以把它修改成第3级或者更低的级别。5级为完全图形化模式Linux系统在这种模式下自动启动X Window系统并配置对应的登录用户以及密码可以从远程服务器启动桌面环境应用于安全的网络环境。6级为重新启动一般用于系统重启时使用系统会自动开启服务并在重启后重新加载所有服务。
各个等级的启动脚本是通过 /etc/rc.d/rc[0-6]/Sxxdaemon 链接到 /etc/init.d/daemonSxxdaemon功能为S表示启动该服务xx是数字代表启动顺序如此开机时可依序启动所需服务同时解决服务相依问题。
设定开机启动
开机启动chkconfig 服务名 on
开启不启动chkconfig 服务名 off
查看是否开机启动chkconfig --list 服务名
切换启动级别
init 数字
systemd管理下的unit分类
centos7以后弃用init改用systemd。优点如下
平行处理所有服务加速开机流程。旧init启动脚本是一项一项依序启动systemd可以使所有的服务同时启动极速响应。全部服务仅由一支systemd服务搭配systemctl命令管理且systemd常驻内存响应快服务相依性的自我检查。systemd可自定义服务相依性的检查若A服务依赖B服务才能启动当手动启动A服务时systemd会自动帮助启动B服务依据daemon功能分类。systemd定义所有的服务为一个服务单元unit并将该unit归类到不同的服务类型type共12种。
ServiceUnit用于定义一个系统服务TargetUnit用于将多个Unit组成一个组DeviceUnit用于描述硬件设备MountUnit用于文件系统的挂载点AutomountUnit用于自动挂载点PathUnit用于定义文件或路径ScopeUnit用于描述不是由Systemd启动的外部进程SliceUnit用于进程组SnapshotUnit用于Systemd快照可以回溯到某个快照SocketUnit用于进程间通信的socketSwapUnit用于swap文件TimerUnit用于定时器
注意若某个服务是管理员手动启动的不是使用systemctl启动的那么systemd将无法侦测到该服务且无法管理
systemd配置文件存放目录
/etc/systemd/system
这是系统默认的systemd配置文件目录。在这个目录中可以创建和修改自定义的systemd服务单元配置文件。这些配置文件定义了服务的名称、依赖项、启动顺序、运行环境等等。
/usr/lib/systemd/system
这是系统级别的systemd配置文件目录。在这个目录中通常包含一些系统级别的服务和应用程序的配置文件。这些配置文件通常由软件包管理器在安装过程中自动创建和更新。
/usr/local/lib/systemd/system
这是用户级别的systemd配置文件目录。在这个目录中可以创建和修改用户级别的服务单元配置文件。这些配置文件只在当前用户的主目录下有效不会影响其他用户。
/run/systemd/system
这是运行时创建的systemd配置文件目录。在这个目录中会存储正在运行的服务单元的配置文件。这些配置文件只在当前会话中有效当系统重新启动时这些配置文件会被清除。
systemctl管理服务
管理单一服务
systemctl 命令 常见状态
active(running)正在运行active(exited)仅执行一次就正常结束的进程active(waiting)正在执行当中需要等待其它事件进来才能继续处理inactive(dead)没有运行
预设状态
enabled开机自启disabled开启不自启static自己不能启动可被其它 enabled 的服务唤醒相依性mask无论如何都无法启动因为已被强制注销非删除。systemctl unmask可恢复
查看httpd服务状态
[rootwenzi ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server 描述服务Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) 服务已加载未设置开机自启厂商预设不开机自启Active: active (running) since Wed 2023-10-18 04:56:09 CST; 3s ago httpd服务状态
...强制注销服务
[rootwenzi ~]# systemctl mask httpd
Created symlink from /etc/systemd/system/httpd.service to /dev/null.
[rootwenzi ~]# systemctl status httpd
● httpd.serviceLoaded: masked (/dev/null; bad)Active: inactive (dead)Oct 18 04:56:09 wenzi.localhost systemd[1]: Starting The Apache HTTP Server...
Oct 18 04:56:09 wenzi.localhost httpd[68352]: AH00558: httpd: Could not reliably determine the servers fully qualified domain name, using wenzi.localhost. Set the ServerNam...this message
Oct 18 04:56:09 wenzi.localhost systemd[1]: Started The Apache HTTP Server.
Oct 18 05:06:06 wenzi.localhost systemd[1]: Stopping The Apache HTTP Server...
Oct 18 05:06:07 wenzi.localhost systemd[1]: Stopped The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[rootwenzi ~]# systemctl start httpd
Failed to start httpd.service: Unit is masked.恢复
[rootwenzi ~]# systemctl unmask httpd
Removed symlink /etc/systemd/system/httpd.service.
注销的实质是让启动的脚本指向 /dev/null
观察服务 systemctl 等价于 systemctl list-units
列出所有已安装的unit
[rootwenzi ~]# systemctl list-unit-files
UNIT FILE STATE
...
crond.service enabled
httpd.service disabled
只列出service类型的unit
[rootwenzi ~]# systemctl list-units --typeserviceUNIT LOAD ACTIVE SUB DESCRIPTIONauditd.service loaded active running Security Auditing Servicecrond.service loaded active running Command Scheduler查看socket服务的socket file 文件位置
[rootwenzi ~]# systemctl list-sockets
LISTEN UNIT ACTIVATES
/dev/log systemd-journald.socket systemd-journald.service
/run/dbus/system_bus_socket dbus.socket dbus.service
/run/systemd/initctl/fifo systemd-initctl.socket systemd-initctl.service
/run/systemd/journal/socket systemd-journald.socket systemd-journald.service
/run/systemd/journal/stdout systemd-journald.socket systemd-journald.service
/run/systemd/shutdownd systemd-shutdownd.socket systemd-shutdownd.service
/run/udev/control systemd-udevd-control.socket systemd-udevd.service
kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
查看所有服务与端口号的对应关系
[rootwenzi ~]# cat /etc/services
tcpmux 1/tcp # TCP port service multiplexer
tcpmux 1/udp # TCP port service multiplexer
rje 5/tcp # Remote Job Entry
rje 5/udp # Remote Job Entry
...
ssh 22/tcp # The Secure Shell (SSH) Protocol
...
管理不同操作环境target unit
和操作界面相关性较高的target主要有
graphical.target文字加图形界面包含multi-user.targetmulti-user.target纯文本模式rescue.target额外的临时系统当系统启动时遇到严重错误无法使用root登录系统时无法正常进入预期的运行级别runlevel时系统会进入rescue.target。在这个模式下系统会启动必要的服务以维持基本的功能允许用户在系统上运行命令和修复问题emergency.target紧急处理系统的错误需要使用root登录当rescue.target不可用时可采用此模式shutdown.target关机getty.target设计tty数量 永久设置为图形界面重启生效
[rootwenzi ~]# systemctl get-default
multi-user.target
[rootwenzi ~]# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
[rootwenzi ~]# reboot
临时改变为图形界面不重启即可生效
[rootwenzi ~]# systemctl isolate graphical.target
其它命令
systemctl poweroff系统关机systemctl reboot重启systemctl suspend进入暂停睡眠模式systemctl hibernate进入休眠模式systemctl rescue强制进入救援模式systemctl emergency强制进入紧急救援模式
suspend指的是除了内存以外的大部分机器部件都进入断电状态并未实际关机当唤醒机器时数据会从内存中恢复重启驱动大部分的机器硬件开始正常工作唤醒速度快。
hibernate将系统状态保存到硬盘中然后关闭所有设备当唤醒机器时数据从硬盘中读取唤醒速度较慢
通过systemctl分析各服务之间相依性 multi-user.target 使用哪些unit
[rootwenzi ~]# systemctl list-dependencies multi-user.target
multi-user.target
● ├─auditd.service
● ├─crond.service
● ├─dbus.service
...
哪些unit使用multi-user.target
[rootwenzi ~]# systemctl list-dependencies multi-user.target --reverse
multi-user.target
● └─graphical.target
systemctl针对service类型的配置文件
相关目录
以vsftpd为例若要额外修改 vsftpd.service 时可参考
/usr/lib/systemd/system/vsftpd.service 官方预设的service配置文件/etc/systemd/system/vsftpd.service.d/custom.conf 建立 “预设service配置文件.d” 文件名的目录再在该目录下建立配置文件 xxx.conf 即可此目录下的配置会进入 /usr/lib/systemd/system/vsftpd.service 中/etc/systemd/system/vsftpd.service.wants/* 此目录内的文件为链接文件设定相依服务的关系。含义启动vsftpd.service 之后然后启动此目录下的服务。/etc/systemd/system/vsftpd.service.requires/* 此目录内的文件为链接文件设定相依服务的关系。含义启动vsftpd.service 之前先启动此目录下的服务。
xxx.service文件详解
以sshd.service为例 [rootwenzi ~]# cat /usr/lib/systemd/system/sshd.service [Unit] DescriptionOpenSSH server daemon Documentationman:sshd(8) man:sshd_config(5) Afternetwork.target sshd-keygen.service Wantssshd-keygen.service [Service] Typenotify EnvironmentFile/etc/sysconfig/sshd ExecStart/usr/sbin/sshd -D $OPTIONS ExecReload/bin/kill -HUP $MAINPID KillModeprocess Restarton-failure RestartSec42s [Install] WantedBymulti-user.target Unit部分
Description 服务的简介说明。 systemctl list-units的Description列 systemctl status sshd的第一行内容 Documentaion 提供文件查询帮助功能。格式 Documentaionhttp://www...Documentaionman:sshd(8)Documentaionfile:/etc/ssh/sshd_configAfter 此处指定的unit必须在当前unit之 前 启动 Before此处指定的unit必须在当前unit之 后 启动Requires此处指定的unit必须在当前unit之 前 启动否则当前unit启动失败Wants此处指定的unit必须在当前unit之 后 启动不影响当前unitConflicts表示冲突的服务此处指定的unit和当前unit只能有一个可以启动。
Service部分
Type daemon的启动方式影响ExecStart。 simple默认值此daemon主要由ExecStart接的命令启动启动后常驻内存forking以 fork 方式从父进程创建子进程创建后父进程会立即退出oneshot一次性进程如文件系统检查与挂载dbus此daemon取得D-Bus名称后才会继续运行通常也会设定BusNamexxxidle所有的工作都顺利执行完毕后才会执行此daemonEnvironmentFile指定启动脚本的环境配置文件ExecStart实际启动此daemon的命令或脚本程序ExecStartPre执行ExecStart前执行的命令ExecStartPost执行ExecStart后执行的命令ExecStop实际停止服务的命令与systemctl stop 有关ExecReload实际重启服务的命令与systemctl reload 有关Restart 定义自动重启当前服务的情形。如 always 总是on-success 成功时on-failure 失败时on-abnormal 异常时on-abort 中止时on-watchdog 描述在看门狗计时器一种监控系统运行的机制触发时触发的动作或事件。这可能涉及到系统的重启、故障恢复或其他类型的自动纠正措施RemainAfterExit当此值为1时此daemon所属的所有程序都终止后会再次尝试启动TimeoutSec此服务未能正常启动或正常终止时等待多久强制结束KillMode process 当daemon停止时只终止主要程序ExecStart后的指令control-group 当前控制组里面的所有子进程都会被杀掉none 没有进程会被杀掉只是执行服务的stop命令RestartSec此服务被关闭需要重新启动时间隔多久预设100ms
Install部分
WantedBy后面大部分接 .target unit此unit归属哪个target unit大多数服务性质的unit都在 multi-user.targetAlso当前unit本身被enable时此处接的unit也enableAlias进行一次软链接