如何将init.d脚本从Ubuntu / Debian Linux转换为Solaris?

时间:2008-11-13 08:59:17

标签: linux shell solaris init.d

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

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

由于我不是Solaris用户,所以我愿意承认我甚至不知道我的问题本质上是否无效。

2 个答案:

答案 0 :(得分:5)

start-stop-daemon是一个Linux产品,在Solaris上没有那么多用。我想你可以移植命令,如果你想重用你的init脚本。

否则,它取决于您使用的Solaris版本。从Solaris 10和OpenSolaris开始,他们使用新的启动脚本框架“Solaris Service Management Facility”,您可以使用命令svcssvccfgsvcadm配置它。

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

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

答案 1 :(得分:4)

建议在Solaris 10或更高版本上使用SMF,但在早期版本中,您将在/etc/init.d中创建一个init脚本,并从rcX.d目录链接到该脚本。以下是启动rsync守护程序的init脚本的一个简单示例:

#!/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]   脚本通过一个单一的论点。它传递参数'stop'   对于以K为前缀的脚本和脚本的参数“start”   以S为前缀。应用相同的序列没有任何害处   编号到多个脚本。