在 Solaris 上重新启动后启动脚本不执行

在 Solaris 上重新启动后启动脚本不执行

我有一个启动 Apache 的命令,/etc/rc3.d该命令在服务器重新启动时不会执行。该脚本名为S75Apache2.有人推测这是因为该链接的名称中有一个大写的“A”,如果重命名为 则可能会起作用S75apache2

有人能证实吗?我搜索过文档但找不到答案。如果不再次重新启动服务器(我不想这样做),我就无法真正测试这一点。

答案1

Solaris 初始化脚本很麻烦。大写字母 A 并不重要,其中有一个脚本/etc/rc.d可以查找以“S”开头的每个文件/etc/rc3.d并按数字顺序运行它们。

这让你从基础开始:

  1. /etc/rc3.d/S75Apache2set 可执行吗?

  2. 该脚本是否有“#!”线?该行是否正确(没有非打印字节等)?

  3. 如果它是 bash 或 ksh 脚本,请将其作为ksh -n /etc/rc3.d/S75Apache2 start.这会告诉你它是否有语法错误。

  4. 如果您可以以 root 身份运行该脚本,请尝试一下:/etc/rc3.d/S75Apache2 start/etc/rc3.d/S75Apache2 stop 仔细检查它是否启动httpd和停止httpd。至少自己运行带有“start”和“stop”参数的脚本。用于set -x查看脚本在运行时执行的操作。检查一下它的作用是否与您认为的相符。

  5. 仔细读/etc/rc3.d/S75Apache2PATH在启动时填充稀疏,您的脚本可能不知道某些可执行文件在启动时位于何处,但可能在启动后运行时知道。尽量不要假设太多 - 您认为存在的文件可能不存在,诸如此类。

  6. 确保KnnApache2中不存在脚本/etc/rc3.d。我相信 Solaris从运行级别 3 转换到运行级别 5 时init将会运行(例如) 。K76Apache2 stop

  7. 确保脚本正确更改用户 ID。这对于 Apache 来说可能并不重要,因为您的脚本可能只是apachectl start使用一些序言命令进行调用,但如果您http直接运行,请确保生成的httpd进程具有正确的用户 ID。使用sudo脚本中的 或 某些内容来使其正确。

答案2

事实证明启动脚本中有一个错误:LD_LIBRARY_PATH 变量设置不正确。在脚本中定义它可以解决问题。

为了将来参考,有一个日志文件包含启动消息,其中包含导致解决我们的问题的错误。该文件是:

/var/svc/log/milestone-multi-user-server:default.log

我在 /etc/rc3.d/README 文件中找到了对此的引用。又一天,又一个知识点!

答案3

您是否已经推出了自己的 Apache(即从源代码编译),或者您只是使用 Solaris 10 预装的 Apache?

好吧,如果您像您所说的那样使用 Solaris 10(或更高版本),那并不重要您根本不应该使用 Solaris 初始化脚本,您应该使用 SMF。 (是的,从技术上讲,初始化脚本仍然受支持,但正如您所指出的,它们很痛苦,而 SMF 则要好得多)

要启动(现在以及重新启动后自动)随 Solaris 10 一起预安装的 Apache 2.2 Web 服务器,只需执行以下操作:

svcadm 启用 /network/http:apache2

如果您已经推出了自己的 Apache,那么您需要创建一个 SMF 清单,导入该清单,然后就可以开始了。只需谷歌搜索“SMF Solaris”,您就会找到很多食谱。

相关内容