4

我有几个 init.d 脚本用于启动一些守护进程。我在互联网上找到的大多数这些脚本都使用 start-stop-daemon。我的理解是“start-stop-daemon”是特定于 Linux 或 BSD 发行版的命令,在 Solaris 上不可用。

将我的 init.d 脚本从 Linux 转换为 Solaris 的最佳方法是什么?是否有一个大致相当于我可以使用的 start-stop-daemon 的命令?

由于我不是 Solaris 用户,因此我愿意提前承认我什至不知道我的问题是否本质上是无效的。

4

2 回答 2

5

start-stop-daemon 是 Linux 的东西,在 Solaris 上用的不多。我想你可以移植命令,如果你想重用你的初始化脚本。

否则,这取决于您使用的 Solaris 版本。从 Solaris 10 和 OpenSolaris 开始,它们使用新的启动脚本框架“Solaris 服务管理工具”,您可以使用命令svcs和.svccfgsvcadm

有关详细信息,请参阅http://www.oracle.com/technetwork/server-storage/solaris/overview/servicemgmthowto-jsp-135655.html

对于较旧的 Solaris 版本,大多数 init 脚本都是用纯 shell 编写的,没有任何辅助命令,例如 start-stop-daemon。

于 2008-11-13T09:46:44.997 回答
4

在 Solaris 10 或更高版本上建议使用 SMF,但在较早的版本中,您将在 /etc/init.d 中创建一个初始化脚本并从 rcX.d 目录链接到它。这是用于启动 rsync 守护进程的初始化脚本的简单示例:

#!/sbin/sh

startcmd () {
    /usr/local/bin/rsync --daemon  # REPLACE WITH YOUR COMMANDS
}

stopcmd () {
    pkill -f "/usr/local/bin/rsync --daemon"  # REPLACE WITH YOUR COMMANDS
}

case "$1" in
'start')
        startcmd
        ;;
'stop')
        stopcmd
        ;;
'restart')
        stopcmd
        sleep 1
        startcmd
        ;;
*)
        echo "Usage: $0 { start | stop | restart }"
        exit 1
        ;;
esac

从每个 rcX.d 目录创建一个指向脚本的链接(遵循“S”/“K”约定)。

ln rsync /etc/rc3.d/S91rsync
for i in `ls -1d /etc/rc*.d | grep -v 3`; do ln rsync $i/K02rsync; done

请参阅每个 rcX.d 目录中的 README 并查看 init.d 的手册页。这是手册页的一部分:

rc?.d 目录中的文件名格式为 [SK]nn,其中 S 表示启动此作业,K 表示终止此作业,nn 是终止或启动作业的相对序列号。

当进入一个状态(init S,0,2,3 等)时,rc[S0-6] 脚本执行 /etc/rc[S0-6].d 中以 K 为前缀的脚本,然后是那些以这些脚本为前缀的脚本使用 S。在 /etc/rc[S0-6] 目录之一中执行每个脚本时,/sbin/rc[S0-6] 脚本会传递一个参数。它为以 K 为前缀的脚本传递参数“stop”,为以 S 为前缀的脚本传递参数“start”。将相同的序列号应用于多个脚本没有害处。

于 2009-03-23T19:42:21.310 回答