在 OpenSolaris 上启动服务之前运行脚本

在 OpenSolaris 上启动服务之前运行脚本

我有一个在 OpenSolaris 上运行的媒体服务器,它使用 Coherence 向网络提供媒体。有时我在启动时遇到问题,因为 Coherence 服务无法启动,因为锁文件仍然存在(未正确清理)。

我想知道在 Coherence 服务尝试启动之前在启动时删除此文件的最佳/最简洁/最官方的方法是什么。

我考虑编写一个快速脚本并将其放在 /etc/rc3.d/ 中,但我读到 OpenSolaris 不一定从该位置运行脚本。

答案1

Solaris 使用 SMF 来管理服务,但仍支持 rc 结构。您的系统上以哪种方式启动 Coherence?我认为您需要对锁定删除脚本使用相同的方法。

有关 Solaris 服务管理工具 (SMF) 的文档,请参见

从该页面开始:

请注意,svcadm 只能用于 SMF 服务 - 旧版 rc 脚本控制的服务工作方式与过去的版本相同。

和:

由传统 rc 脚本启动的服务(称为旧式服务)通常会继续像往常一样工作。它们将显示在 svcs(1) 的输出中,并带有基于其 rc 脚本路径名的 FMRI,但它们无法由 svcadm(1M) 控制。应通过直接运行 rc 脚本来停止和启动它们。

正如“值得注意的变化”部分所述,rc 脚本在启动时运行的时间点可能与早期版本的 Solaris 中不同。特别是,依赖于在某些 Solaris 提供的 rc 脚本之前运行的脚本可能会遇到问题。不过,绝大多数脚本应该可以继续正常工作,不会出现任何问题。

Coherence (Open)Solaris 安装指南

答案2

只是为了给未来的人们提供信息。

我通过修改 coherence.sh 脚本(svcadm 使用该脚本来启动/停止服务器)解决了我的问题,添加了代码来检测服务器是否正在运行,如果没有运行则删除那里的日志文件。

插入的代码:

check() {
        if [ -f ${LOCKFILE} ]; then
            pgrep -f /usr/bin/$PROGNAME &> /dev/null
            RETVAL=$?
            [ ${RETVAL} -ne 0 ] && rm -rf ${LOCKFILE}
            echo ${RETVAL}
        fi
        return 0
}

然后我从 start() 函数的开头并在 stop() 函数返回之前调用了此函数。

这将检查可执行文件是否正在运行,如果没有运行,则删除日志文件。似乎运行正常,我没有遇到任何问题。

相关内容