2-9-svcs-init

网友投稿 498 2022-09-24

2-9-svcs-init

2-9-svcs-init

chenxiaomin

SMF--service management facility

提供一个集中式的系统服务管理结构

服务之间有相互依存的关系

服务的启动 停止 重启 信息

服务的开启方式  服务的状态显示信息

服务不正常时的故障管理

错误配置的导致服务的不正常运行的详细信息

记录日志对于每个服务都有

一个系统可能有很多个服务在运行

服务的类别包括

应用程序

设备

遗产

里程碑

网络平台

位置

系统

svc:/system/filesystem/root:default

svc说明是有SMF管理

system说明服务类别是system

filesystem说明这个服务是他自己的文件系统

root说明是root文件系统

default说明是这个服务的默认标识

lrc:/etc/rc3_d/S90samba

lrc(legacy run control)说明这个服务不是由SMF管理

/etc/rc3_d 说明由这个路径下的脚本来管理这个服务

S90samba这个服务的标识符是S90samba

查看所有服务

svcs

服务的状态

online 在线

offline 离线

disable 不可用

legacy_run 不受SMF管理的服务

uninitialized 所有服务未被配置之前的初始状态

maintenance 需要维护

degraded 服务可用,但是有限制

milestone-里程碑

single-usre

multi-user

multi-user-server

network

name-services

sysconfig

devices

默认系统启动所有里程碑

以下是在引导时可选的里程碑模式

none

single-user

multi-user

multi-user-server

all 默认

里程碑的概念就是

系统运行级别--对应--里程碑

init0

init s S     single-user

init1

init2     multi-user

init3     multi-user-server

init4

init5

init6

当SMF对服务进行管理的时候

svc.configd守护进程将在管理之前备份

这样在SMF管理过后导致出错,也可以恢复

恢复命令是/lib/svc/bin/restore_repository

安装提示操作

who -r 解析

run-level 3  May  5 08:47     3      0  S

当前运行等级为3

在最后的一次运行等级是在 5月5好08:47

当前运行等级 3

这次运行等级的上一次运行等级是0

以前的运行等级是S

改变运行等级

init [123456sS]

必须要有svc.startd守护进程才可以使用init命令

关闭系统 shutdown  poweroff  halt

也可以通过svcadm 通过改变里程碑来改变运行等级

Solaris9以前使用init守护进程

init守护进程初始化流模块

Solaris10开始使用svc.startd守护进程

svc.startd建立一个反应系统停电关机和开启的进程

---系统引导阶段system boot phase---

phase阶段

一、boot Prom 阶段

PROM运行自检

引导本地引导设备

读取引导块reads bootblk

装载引导块loads bootblk

二、boot programs 阶段

引导块装载第二引导程序ufsboot

ufsboot装载内核kernel

三、kernel initialization阶段

内核装载配置文件 reads configuration file /etc/system

内核初始化自身并装载模块 initializes itself and loads modules

四、init 阶段

内核开始kernel starts /etc/init

初始化svc.startd进程 init starts

五、启动服务

svc.startd 启动系统服务

1.自检

POST检查硬件及内存 还有诊断

显示系统信息hostid memory NVRAM-S/N PROM-rversion processor-type-speed

根据PROM的boot-device参数决定引导设备

loads disk label 在磁盘的磁道的0扇区位置

PROM从磁盘中发现boot programs并 加载到 PROM 读取bootblk 在磁道的1-15扇区

boot命令加载bootblk到memory (系统安装的时候通过installboot命令安装的引导块)

2.引导程序

bootblk加载第二引导程序usfboot程序到memory

通过installboot命令,bootblk记录了ufsboot的路径

ufsboot装载3分之2的内核到memory

内核分2类:genunix 独立平台内核文件platform-independent generic kernel file

unix 限定平台内核文件platform-specific kernel file

在运行64bit系统上,从/platform/'uname -m'/kernel/sparcv9这个目录加载3分之2的内核文件

Solaris 10 for SPARC只能运行在64bit系统上

3.内核初始化

内核读取/etc/system文件

内核初始化自己,接着开始装载模块

内核开始启动/etc/init进程

Sun的kernel是一个小的静态核,包含大多动态genunix和unix的可受载核模块

模块装载驱动程序,二进制文件,流,还有其他指定的模块

内核模块目录在/kernel和/usr/kenrel,/platform/'uname -m'/kernel或

/platform/'uname -i'/kernel目录,目录底下包含:

drv/sparcv9  设备驱动

exec/sparcv9 可执行文件格式

fs/sparcv9 文件系统类型

misc/sparcv9 混杂的模块

sched/sparcv9 调度

strmod/sparcv9 数据流模块

sys/sparcv9 为应用程序定义的接口

加载64bit kernel在/platform/sun4u/kernel/sparcv9/下的unix和genunix

加载模块在

/kernel

/usr/kernel

/platform/'uname -m'/kernel

/platform/'uname -i'/kernel

更小的内核划分有利于内存的使用和系统参数的修改

/etc/system文件作用  定义了5个段

这个文件在做每一次修改之前,一定要记得备份,若系统因为修改过该文件而导致无法启动时,进入ok模式使用命令boot -a 使用交互式引导选择备份的system文件进入系统

moddir搜索内核模块的路径,在系统引导的时候

root device and root fs configuration定义root文件系统类型与设备

exclude定义拒绝装载的模块

forceload定义强制装载的模块

set定义新的内核参数值

以*开头作为注释符号,每行命令必须等于小于80个字符

4.init

init守护进程使用/etc/inittab文件信息开始启动svc.startd进程

inittab表的条目

id 2个字符标识条目,也有3个字符的

rstate:可在此运行等级下运行

action 标识命令如何运行 选项sysinit和powerfail

process 运行的命令

solaris8以前的所有rc脚本信息写入/dev/console文件,现在写入/dev/msglog

5.启动服务

svc.startd 为启动合适的运行等级  (以前是init进程负责)

svc.startd进程使用/var/svc/manifest目录下的文件确定系统运行的里程碑

/var/svc/manifest/milestone目录下的文件也可能参考其他的xml文件

像/sbin/rc2和/lib/svc/method/fs-local

遗留的boot进程/sbin/rc*  通过svc.startd进程来执行这些脚本,设置变量,验证条件,呼叫其

他脚本运行以达到该运行等级要求

rc1 rc5 rc6 是相互硬链接

在/etc/下的rc*文件动态链接到/sbin/rc*文件

介绍/sbin/目录下的rc脚本

/sbin/rc0---运行/etc/rc0.d/K* /etc/rc0.d/S*脚本停止系统服务和守护进程,

执行快速系统清除功能

/sbin/rc1---运行/etc/rc1.d/S*脚本,停止系统服务和守护进程,终止某一应用进程,

卸载所有远程文件系统

/sbin/rc2---运行/etc/rc2.d/K*和/etc/rc2.d/S*脚本启动一个应用守护进程

/sbin/rc3---运行/etc/rc3.d/K*和/etc/rc3.d/S*脚本启动一个应用守护进程,若K*脚本不正常

都会被运行

/sbin/rc5 rc6---运行/etc/rc0.d/K*和/etc/rc0.d/S*脚本停止系统服务和守护进程,

执行快速系统清除功能

/sbin/rcS---运行/etc/rcS.d脚本将系统带到S运行等级并建立最小网络模式

在以上这些目录下,K开头的脚本是Kill,S开头的脚本是Start

以 /.S50apache {start | stop}方式运行或停止S50apache脚本

------

控制脚本目录/etc/init.d/

该目录下的apache文件和/etc/rc3.d/S50apache文件是相互硬链接关系

启动或停止这些脚本的方式/etc/init.d/apache {start |stop }

----------

svcs命令

检查服务状态 svcs svc:/system/console-login:default

-d检查服务依赖关系 svcs -d svc:/system/console-login:default

-D 检查依赖该服务的服务有哪些 svcs -D svc:/system/filesystem/local 列出依赖该服务的服务

svcs -x cron 检查服务为什么没运行

svcadm管理服务命令

svcadm -v enable /system/cron:default   没有其他参数永久关闭 直到enable命令出现

-v显示开启信息

svcadm -v disable -t system/cron:default

-t 临时关闭服务  下次重启自动开启

前缀为lcr的服务不受SMF管理

svcs -a|grep lrc可以查看到不受SMF管理的服务列表

---创建新的服务脚本----

步骤:

判断这个服务是用来开启还是终止进程的

对这个服务建立一个名称,并分类

判断服务是否需要运行多个实例

确定服务的依赖关系:依赖还是被依赖

假如一个脚本必须开始或者终止一个进程,可以创建这个脚本并写入到/usr/local/svc/method/目录下

创建一个服务清单文件,服务是通过svccfg命令还是在引导的时候被体现

使用svccfg命令将服务写入SMF,以便管理

例如:

vi /usr/local/svc/method/newservice

chmod 544 /usr/local/svc/method/newservice

cd /var/svc/manifest/site

vi newservice.xml

svccfg import /var/svc/manifest/site/newservice.xml

svcs newservice

svcadm -v disable site/newservice

svcs newservice

svcadm -v enable site/newservice

svcs newservice

svcs -d milestone/multi-user:default

--增加一个不属于SMF管理的 服务----lcr

vi /etc/init.d/filename 编辑脚本

chmod 744 /etc/init.d/filename 修改权限

chgrp sys /etc/init.d/filename 修改组

cd /etc/init.d/ 进入目录

ln filename /etc/rc#.d/S##filename 创建符号链接

ln filename /etc/rc#.d/K##filename 创建符号链接

ls -li /etc/rc#.d/S##filename 查看

ls -li /etc/rc#.d/K##filename 查看

/etc/init.d/filename start 验证脚本

------

---关闭系统---

shutdown

系统管理,维护,转移系统等需要

必须安全关闭系统:完全,有序,写入disk,kill 进程,umount文件系统

shutdown的不同方式 只有root用户才有这些操作的权限

1.进入单用户模式

2.进入ok模式

3.断电

4.关闭系统并重启

/usr/init {S,0,1,5,6}

/usr/sbin/shutdown

init 命令执行关机 好处在于它使用rc0脚本关闭系统,不会影响系统,但是不给在线的用户发出警告

shutdown 调用init命令关机,但是向在线用户发出关闭系统信息,默认延迟60s执行命令

shutdown -y -g grace-period -i init-state optional message

例:shutdown -y -g0 -i6 "###-The system will shutdown,please save your documents,Thank you !!!-###"

强制关机命令

halt

poweroff

reboot

-------指定里程碑----引导系统-----

在没有指定的情况下,系统默认启动all 所有的里程碑

svcadm -v mileatone -d multi-user-server:default

有效的选项包括

all

none

svc:/milestone/single-user:default

svc:/milestone/multi-user:default

svc:/milestone/multi-user-server:default

---------

管理服务信息储存库

储存历史服务设置的,每当服务设置有变动的时候将备份,若设置错误导致无法启动系统,还可以恢复

执行脚本查看服务信息库

cd /lib/svc/bin

./restore_repository

--------为止----------

=========================================

SMF 后台服务管理机制

确定基本运行及 比较运行级别  SMF里程碑 确定启动进程的阶段

SMF命令控制启动程序

启动 停止 重新启动服务

每个服务都有一个log文件,保存在 /var/svc/log/目录下

命令

svcs 显示服务信息情况

svcs -a 显示所有服务

svcs -a |grep nfs  查×××

/lib/svc/method/nfs-server start 开启服务

/lib/svc/method/nfs-server stop  停止服务

svcs(service status)命令

svcs用于查看服务的状态,

svcs -a用于查看所有状态的服务

svcs -x用于查看未正常启动的服务

svcs -l 用于查看单个服务的详细信息

svcadm(manipulate service instances)命令

svcadm用来启用/禁用、启动/停止SMF服务。

svcadm enable fmri -- 启用一个SMF服务,同时运行该服务

svcadm disable fmri -- 禁用一个SMF服务,同时停止该服务

svcadm restart fmri -- 重启一个SMF服务

svcadm refresh fmri -- 刷新一个SMF服务,相当于让服务重新载入配置文件

svcadm mark fmri -- 将SMF服务标记为维护状态

svcadm clear fmri -- 清除SMF服务的维护状态

svcadm milestone milestone -- 进入指定的服务里程碑,相当于进入相应的运行级别

服务状态

svcs命令可以列出服务标示和服务状态情况。服务状态包括以下类型:

Online:服务实例是enable并且成功启动的。

Offline:服务实例是enable的但没有启动。

Disable:服务实例是enable并且运行的。

Legacy_run:这个服务并是通过SMF来管理的,但是可以通过svc来查看。

Uninitialized:在它们的配置文件可读之前,要初始化所有的服务。

Maintenance:这个服务发生了错误,必须等待管理员解决。

Degraded:这个服务是enable但是受限制运行。

7种里程碑

svcs |grep milestone

Single-user 单用户模式

Multi-user 多用户模式

Multi-user-server 多用户多服务器模式

Network 网络模式

Name-services 名服务模式

Sysconfig 系统配置模式

Devices 设备模式

里程碑的概念就是

系统运行级别 对应里程碑

init0

init s S single-user

init1

init2 multi-user

init3 multi-user-server

init4

init5

init6

svc.startd进程 维持系统服务

Svc.startd进程确保系统启动为合适的里程碑方式。如果启动的时候没有指定里程碑,Svc.startd会启动建立包括所有系统服务的里程碑(all)。

在启动系统的时候指定里程碑用-m参数。

> boot –m milestone=single-user

svccfg(service configurations)命令

svccfg命令用来管理SMF repository。运行不带参数的svccfg命令进入一个交互式的shell,在该shell里可以对服务、服务实例进行配置、导入、导出、备份、恢复操作

SMF服务排错

使用svcs -xv可以查找未正常启动的服务。SMF对每个服务实例都在/var/svc/log目录创建了一个和服务FMRI对应的日志文件,比如apache2服务的FMRI为svc:/network/-l /var/svc/log  |grep network

*****inetd服务*****

inetadm -e fmri 启用指定的inetd服务

inetadm -d fmri 禁用指定的inetd服务

inetadm -l fmri 列出指定inetd服务的属性

inetadm -p      列出默认inetd服务的属性

查看telnet服务

inetadm  |grep telnet

禁用telnet服务

inetadm  -d telnet

未使用SMF的服务有

ls -l /etc/rc3.d 目录下的

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:操作系统内核的一些事
下一篇:18个衡量社交营销的指标!(社交营销特点)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~