我有一个启动 Apache 的命令,/etc/rc3.d
该命令在服务器重新启动时不会执行。该脚本名为S75Apache2
.有人推测这是因为该链接的名称中有一个大写的“A”,如果重命名为 则可能会起作用S75apache2
。
有人能证实吗?我搜索过文档但找不到答案。如果不再次重新启动服务器(我不想这样做),我就无法真正测试这一点。
答案1
Solaris 初始化脚本很麻烦。大写字母 A 并不重要,其中有一个脚本/etc/rc.d
可以查找以“S”开头的每个文件/etc/rc3.d
并按数字顺序运行它们。
这让你从基础开始:
/etc/rc3.d/S75Apache2
set 可执行吗?该脚本是否有“#!”线?该行是否正确(没有非打印字节等)?
如果它是 bash 或 ksh 脚本,请将其作为
ksh -n /etc/rc3.d/S75Apache2 start
.这会告诉你它是否有语法错误。如果您可以以 root 身份运行该脚本,请尝试一下:
/etc/rc3.d/S75Apache2 start
并/etc/rc3.d/S75Apache2 stop
仔细检查它是否启动httpd
和停止httpd
。至少自己运行带有“start”和“stop”参数的脚本。用于set -x
查看脚本在运行时执行的操作。检查一下它的作用是否与您认为的相符。仔细读
/etc/rc3.d/S75Apache2
。PATH
在启动时填充稀疏,您的脚本可能不知道某些可执行文件在启动时位于何处,但可能在启动后运行时知道。尽量不要假设太多 - 您认为存在的文件可能不存在,诸如此类。确保
KnnApache2
中不存在脚本/etc/rc3.d
。我相信 Solaris从运行级别 3 转换到运行级别 5 时init
将会运行(例如) 。K76Apache2 stop
确保脚本正确更改用户 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”,您就会找到很多食谱。