2008-11-13 65 views
4

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

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

因为我对Solaris用户不是很了解,所以我愿意承认,我甚至不知道我的问题是否内在地无效。

回答

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。

+0

我正在使用OpenSolaris。感谢您的信息,我会检查您发布的链接。 – 2008-11-13 09:54:28

4

建议在Solaris 10或更高版本中使用SMF,但在早期版本中,您需要在/etc/init.d中创建一个init脚本,并从rcX.d目录链接到该脚本。下面是一个init脚本用于启动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目录中的自述文件,并检查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' 传递参数'start',前缀为S的脚本 的参数'start'。将相同序列 编号应用于多个脚本没有任何坏处。