我有几个init.d脚本,我用来启动一些守护进程。我在互联网上找到的大多数这些脚本都使用start-stop-daemon。我的理解是“start-stop-daemon”是一个特定于Linux或BSD发行版的命令,在Solaris上不可用。
将init.d脚本从Linux转换为Solaris的最佳方法是什么?是否有一个命令等同于我可以使用的start-stop-daemon,粗略?
由于我不是Solaris用户,所以我愿意承认我甚至不知道我的问题本质上是否无效。
答案 0 :(得分:5)
start-stop-daemon是一个Linux产品,在Solaris上没有那么多用。我想你可以移植命令,如果你想重用你的init脚本。
否则,它取决于您使用的Solaris版本。从Solaris 10和OpenSolaris开始,他们使用新的启动脚本框架“Solaris Service Management Facility”,您可以使用命令svcs
,svccfg
和svcadm
配置它。
有关详细信息,请参阅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为前缀。应用相同的序列没有任何害处 编号到多个脚本。