Solaris 服务管理器(Service Management Facility, SMF)是Solaris 10以及后续版本的Solaris操作系统当中采用的软件服务管理工具。SMF按照服务的相关性来启动、停止和管理服务,并兼容现有的管理习惯(如启动脚本等)。对于使用过Windows的读者来说,SMF的功能类似于“控制面板”中的“服务”;对于使用过Linux和Unix的读者来说,这个功能部分替代了/etc/rc*.d中的启动脚本和超级服务器inetd/xinetd的功能。
重启网络服务:
svcadm restart network
SMF特性简介
当出现了管理错误、软件缺陷或者是硬件缺陷导致服务程序异常中止的时候,SMF可以自动按照一定的次序重新启动服务。
使用svcs命令可以查看所有的服务,而是用svcadm和svccfg命令可以管理所有的服务。使用svcs -p命令可以查看与本服务相关联的其他服务。
通过服务快照设置可以很容易地实现服务的备份和恢复。
通过svcs -x命令可以很容易地对服务进行调试,并且可以使每个服务都有自己的固定日志。
所有的服务都可以通过svcadm进行启动和关闭。具有相应角色的非root用户也可以启动、修改和关闭服务。
SMF服务标示
SFM服务标识(Fault Management Resource Identifier, FMRI)指的是服务实例的命名。举个例子,rlogin服务的FMRI是svc:/network/login:rlogin。
同理,类似的FMRI还有svc:/system/system-log:default。
SMF服务状态
服务的状态包括如下几种类型:
状态标示 状态描述
degraded 服务已经启动,但是在受限制的状态下运行。
disabled 服务处于关闭状态。
legacy_run 这个服务目前无法被SMF所管理,但是可以被SMF所监测到。
maintenance 维护状态。这个服务有大量的错误并且应该有系统维护人员进行修复。
offline 这个服务已经启动,但是处于离线运行状态。
online 这个服务已经启动,并且处于在线运行状态。
uninitialized 这个服务尚未初始化。
SMF相关命令
下面我们通过几个具体的实例来介绍SMF的使用方法。这些操作需要您首先拥有root权限。
(0) 获得root权限
# su (此处需要输入您的root密码。)
(1) 察看所有服务的状态
# svcs -a
(2) 察看sendmail这个服务的状态
# svcs sendmail # svcs -l sendmail
(3) 察看sendmail这个服务所依赖的其他服务的状态
# svcs -d sendmail
(4) 关闭sendmail这个服务
# svcadm disable sendmail
(5) 再次察看sendmail这个服务的状态
# svcs sendmail # svcs -l sendmail
(6) 启动sendmail这个服务
# svcadm enable sendmail
(8) 再次察看sendmail这个服务的状态
# svcs sendmail # svcs -l sendmail
(9) 重新启动sendmail这个服务
# svcadm restart sendmail
练习
SSH 是一种加密远程传输的协议,可以用于登录远程的服务器。和我们经常使用的telnet所不同的是,通过SSH进行传输的信息是经过加密的,所以不容易被第三方所截获和破解。在大部分的Unix/Linux发行版上都提供了SSH服务器和客户端,OpenSolaris Developer Preview版本也是这样。
在缺省的状态下,在OpenSolaris Developer Preview版本上SSH服务是打开的。我们可以使用svcs命令检查一下这个服务的状态:
# scvs ssh
如果SSH服务确实是打开的,我们可以在命令行下通过SSH连接到本机。
# ssh localhost
如果没有什么意外的话,我们应该可以看到要求您输入密码的提示。这是因为SSH客户短缺省地使用了您当前的用户名作为登陆用户名,因此您只需要提供您的登陆密码就可以了。
现在我们关闭SSH服务,然后检查该服务的状态:
# svcadm disable ssh # svcs ssh
可以看到,这时候SSH服务已经被关闭。如果我们再次尝试通过SSH连接到本机的话,会由于超时而连接失败。
# ssh localhost
现在我们启用SSH服务,然后检查该服务的状态:
# svcadm enable ssh # svcs ssh
可以看到,这时候SSH服务已经被起用。如果我们再次尝试通过SSH连接到本机的话,会再次看到要求输入密码的提示。
# ssh localhost
svcadm restart network