0

我有 2 个关于 Solaris SMF 的问题。(我是 SMF 新手。)

我按照https://docs.oracle.com/cd/E37838_01/html/E61677/odbstartstop.html在 SMF 中设置了 Oracle RDBMS 服务

数据库部分完全按预期工作,因此我添加了一个侦听器作为另一个服务实例,因为方法脚本有一个“侦听器”选项作为参数而不是“db”,并且将运行 alsnrctl start ${LISTENER} 而不是使用sqlplus来访问然后启动或停止数据库实例。

服务的svcadm enablesvcadm disable按预期启动和停止侦听器。问题是框​​架会感知是否lsnrctl正在运行,但如果它已停止,则不会重新启动它。见下文:

svc:/site/oracle/db/oracle12lsnr:LISTENER4 (?)
 State: maintenance since May 21, 2020 03:25:39 PM BST
Reason: Method failed.
   See: http://support.oracle.com/msg/SMF-8000-8Q
   See: /var/svc/log/site-oracle-db-oracle12lsnr:LISTENER4.log
Impact: This service is not running.

-原因:方法失败。- 与通过svcadm enable(或disable)调用该方法表明该方法工作正常这一事实不一致。

进一步调查 - 我从 root 杀死了lsnrctl进程并从svcs -Lv得到了这个

[ May 22 14:13:30 Executing stop method ("/lib/svc/method/svc-oracle12-database lsnr stop LISTENER4"). ]
LSNRCTL for Solaris: Version 12.1.0.2.0 - Production on 22-MAY-2020 14:13:30
Copyright (c) 1991, 2016, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orahost.some.domain)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Solaris Error: 146: Connection refused
[ May 22 14:13:30 Method "stop" exited with status 95. ]

所以第一个问题已经改变,现在是:为什么它会运行 stop 方法?该服务的db版本在数据库服务宕机时运行start方法。

Q1 的答案:服务框架运行 stop 方法,然后运行 ​​start 方法。一旦建立起来,重新审视方法脚本就会发现一个缺陷。如果无法联系到 tnslsnr 进程,则在 stop 方法中退出错误。(逻辑失败。如果 tnslsnr 进程被杀死,您将无法测试与它的连接!)

老实说,我正在努力处理大量信息。我目前正在阅读上面 URL 的 pdf 版本。我在这里快速浏览了 Moellenkamp 的博客http://blog.moellenkamp.org/archives/18-Auditing-a-single-SMF-service-revisted.html但我还没有实现该审计服务 - 假设它会无论如何帮助。如果有人对为什么这不起作用有任何想法,我将不胜感激。

第二个问题是这样的:

在示例中,清单存储在/lib/svc/manifest/site/oracle/db其中,第一次我将其更改为,/lib/svc/manifest/site/oracle12db因为 2 个子目录(在 .../site 之后)似乎有点过头了,这导致服务无法以任何方式工作(始终处于维护状态)。我已经调整了清单 xml 文件以匹配更改后的目录结构。我很困惑,在摆弄之后,我只是更改了 xml 文件和目录结构以匹配示例,并且一切正常。为什么会这样?service_nameservice_bundle中的图层是否有一些公式?

我还没有读到任何说必须按照示例扩展目录结构的内容。据我所知,我没有打错 xml 文件 - 特别是撤销更改以匹配原始示例只是更改 service_name 和 service_bundle 行以匹配扩展目录结构。

4

2 回答 2

2

要诊断服务失败的原因,请始终从服务日志开始,其路径位于 svcs 输出中。或者直接使用“svcs -Lv”来显示。

于 2020-05-22T12:19:27.690 回答
1

Another 'easy when you know how'. Upon failure the framework runs the stop method followed by the start method.

I can now scan through the pdf and look to confirm this and also such things as restart and refresh. I'll vote for user13596356's response because the quick turnaround on checking the log and a bit of input from an SMF question by user40330 from 7 yrs ago got me looking at the service method script which was flawed.

于 2020-05-22T14:25:57.373 回答