用tar.gz的包装了tomcat如何设置自动启动

sh/bash/dash/ksh/zsh等Shell脚本
回复
cmwfox
帖子: 40
注册时间: 2007-02-26 11:09

用tar.gz的包装了tomcat如何设置自动启动

#1

帖子 cmwfox » 2007-12-08 20:45

用tar.gz的包装了tomcat如何设置自动启动

/usr/local/apache-tomcat-5.5.20/bin/startup.sh 可以启动,下次重启机就不行了。

在/etc/rc.local中和 /etc/init.d/rc.local中加入了上面的命令也不行,

请大家说细一些

我安装的是ubuntu server 7.04 没有桌面

用以下两种方法都试了也不成:
1、sudo cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql
2、sudo chmod +x mysql
3、sudo sysv-rc-conf
(运行服务管理工具,没有sysv-rc-conf的可以马上安装一个,apt-get install sysv-rc-conf,关于sysc-rc-conf的使用可以参考<Ubuntu7.04下使用sysv-rc-conf管理服务>)
4、运行sysv-rc-conf后找到mysql,并为它设置一个运行级别,本人设了2345。

另一种自动启动
cd /home/cmwfox/mysql-5.0.45
cp support-files/mysql.server /etc/init.d/mysqld
cd /etc/init.d
update-rc.d mysqld defaults
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#2

帖子 bones7456 » 2007-12-08 21:19

代码: 全选

sudo ln -s /usr/local/apache-tomcat-5.5.20/bin/startup.sh /etc/rc2.d/S99tomcat
这样试试
关注我的blog: ε==3
cmwfox
帖子: 40
注册时间: 2007-02-26 11:09

#3

帖子 cmwfox » 2007-12-08 21:31

sudo ln -s /usr/local/apache-tomcat-5.5.20/bin/startup.sh /etc/rc2.d/S99tomcat

大哥你这办法不行啊.
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#4

帖子 bones7456 » 2007-12-08 21:34

为什么?难道你的runlevel不是2? 输个runlevel,看看输出。
关注我的blog: ε==3
cmwfox
帖子: 40
注册时间: 2007-02-26 11:09

#5

帖子 cmwfox » 2007-12-08 21:48

bones7456 写了:为什么?难道你的runlevel不是2? 输个runlevel,看看输出。
是2的
root@ubuntu:~# runlevel
N 2


root@ubuntu:/etc/rc2.d# ls
README S11klogd S20makedev S89atd S99fetchmail S99rmnologin
S10sysklogd S16ssh S20rsync S89cron S99rc.local S99tomcat
root@ubuntu:/etc/rc2.d#
但启机就是不动行tomcat
cmwfox
帖子: 40
注册时间: 2007-02-26 11:09

#6

帖子 cmwfox » 2007-12-10 17:38

还有朋友知到吗。
cmwfox
帖子: 40
注册时间: 2007-02-26 11:09

#7

帖子 cmwfox » 2007-12-11 19:47

?/??
自由狼-台风
帖子: 9
注册时间: 2008-01-17 12:39

[分享]这个问题我刚刚搞定。

#8

帖子 自由狼-台风 » 2008-01-17 12:42

这个问题我刚刚搞定。不过我的系统服务是SysV风格的,强行弄成BSD风格比较别扭。如果一定要用BSD风格,可以在“/etc/rc.d/rc.local”里添加一行“/etc/rc.d/init.d/tfw_tomcat start”。但BSD风格我不清楚如何控制服务停止。

我的SysV服务脚本“/etc/rc.d/init.d/tfw_tomcat”内容:

代码: 全选

#! /bin/sh

# chkconfig: 35 96 04
# description: Apache-Tomcat service script.

# Version:
#	2008-01-17-01
# By:
#	Typhoon.Free.Wolf.

# Service name.
SVC_NAME="Apache-Tomcat"
# Lock file.
LOCK_FILE="/var/lock/subsys/tfw_tomcat"
# Installation prefix.
APP_HOME="/opt/prog/c/Apache/Tomcat"
# The process name to monitor.
APP_PROC="java"
# Authorize user.
APP_USER="typhoon"

SLEEP_START=5
SLEEP_STOP=$SLEEP_START

# Importing functions.
囗囗囗_func=0
if [ -f /etc/init.d/functions ] ; then
	. /etc/init.d/functions
	囗囗囗_func=1
elif [ -f /etc/rc.d/init.d/functions ] ; then
	. /etc/rc.d/init.d/functions
	囗囗囗_func=1
fi

# Templete.
# Return:
#	囗囗囗_PROC_ON means process is there.
#	囗囗囗_PROC_OFF means process not exists.
#	Other means error.
囗囗囗_PROC_ON=1
囗囗囗_PROC_OFF=0
probe() {
	srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
	for rst in $srch_rst ; do
		if [ $APP_PROC = $rst ] ; then
			return $囗囗囗_PROC_ON
		fi
	done
	return $囗囗囗_PROC_OFF
}

# Templete.
#	Shows OK.
# Return:
echo_ok() {
	case $囗囗囗_func in
		1)
			echo_success
			echo ""
		;;
		*)
			echo ""
			echo "	[  OK  ]"
		;;
	esac
}

# Templete.
#	Shows Passed.
# Return:
echo_pass() {
	case $囗囗囗_func in
		1)
			echo_passed
			echo ""
		;;
		*)
			echo ""
			echo "	[PASSED]"
		;;
	esac
}

# Templete.
#	Shows Failed.
# Return:
echo_bad() {
	case $囗囗囗_func in
		1)
			echo_failure
			echo ""
		;;
		*)
			echo ""
			echo "	[FAILED]"
		;;
	esac
}

# Templete.
#	Start section.
# Return:
_start() {
	probe
	proc=$?
	echo ""
	echo "Starting $SVC_NAME..."

	if (touch $LOCK_FILE) ; then
		echo_ok
	else
		echo_bad
	fi
}

start() {
	probe
	proc=$?
	echo ""
	echo "Starting $SVC_NAME..."

	if [ $囗囗囗_PROC_OFF = $proc ] ; then
		if (su - $APP_USER -c "$APP_HOME/bin/startup.sh") ; then
			sleep $SLEEP_START
			if (touch $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
				echo ""
			fi
		else
			echo_bad
		fi
	elif [ $囗囗囗_PROC_ON = $proc ] ; then
		if (touch $LOCK_FILE) ; then
			echo_passed
			echo ""
		else
			echo_bad
		fi
	fi
}

# Templete.
#	Stop section.
# Return:
_stop() {
	probe
	proc=$?
	echo ""
	echo "Stopping $SVC_NAME..."

	if (rm -Rf $LOCK_FILE) ; then
		echo_ok
	else
		echo_bad
	fi
}

stop() {
	probe
	proc=$?
	echo ""
	echo "Stopping $SVC_NAME..."

	if [ $囗囗囗_PROC_OFF = $proc ] ; then
		if (rm -Rf $LOCK_FILE) ; then
			echo_passed
			echo ""
		else
			echo_bad
		fi
	elif [ $囗囗囗_PROC_ON = $proc ] ; then
		if (su - $APP_USER -c "$APP_HOME/bin/shutdown.sh") ; then
			sleep $SLEEP_STOP
			if (rm -Rf $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
				echo ""
			fi
		else
			echo_bad
		fi
	fi
}

# Parse command line parameters.
case $1 in
	start)
		start
	;;
	stop)
		stop
	;;
	restart)
		stop
		start
	;;
	*)
		# Print help
		echo "Usage: $0 {start|stop|restart}"
		exit 1
	;;
esac

exit 0
上次由 自由狼-台风 在 2008-01-18 9:10,总共编辑 1 次。
自由狼-台风
帖子: 9
注册时间: 2008-01-17 12:39

#9

帖子 自由狼-台风 » 2008-01-17 12:56

“# chkconfig: 35 96 04”行含义:
·这行是给“/sbin/chkconfig”准备的说明依,“/sbin/chkconfig”赖这行。。
·在切换向运行级别3和5启动本服务,而如果可能,在切换向其他运行级别时关闭本服务。
·本服务在关闭队列中的序号为94,“/sbin/chkconfig”会在相应级别的“/etc/rc.d/rcN.d”(N=0/1/2/4/6)里创建指向本脚本的链接“K94tfw_tomcat”。
·本服务在启动队列中的序号为04,“/sbin/chkconfig”会在相应级别(3、5)的“/etc/rc.d/rcN.d”(N=3/5)里创建指向本脚本的链接“S04tfw_tomcat”。
·实际上,链接中的序号可以自己指定,本行的序号用于自动创建链接。

“# description: Apache-Tomcat service script.”行含义:
·注释,具体用途尚不明确,但“/sbin/chkconfig”也依赖这行。

如果你没有“/sbin/chkconfig”这个工具,手工创建链接也是可以的。如果修改了脚本名,请也修改“$LOCK_FILE”的值。
自由狼-台风
帖子: 9
注册时间: 2008-01-17 12:39

#10

帖子 自由狼-台风 » 2008-01-18 9:14

再附上自编PostgreSQL的服务脚本:

代码: 全选

#! /bin/sh

# chkconfig: 35 98 02
# description: PostgreSQL RDBMS start/stop script.

# Version:
#	2008-01-17-01
# By:
#	Typhoon.Free.Wolf.

# Service name.
SVC_NAME="PostgreSQL"
# Lock file.
LOCK_FILE="/var/lock/subsys/tfw_pgsql"
# Installation prefix.
APP_HOME="/opt/prog/m/PostgreSQL.MagicLinux-2.0"
# The process name to monitor.
APP_PROC="postmaster"
# Authorize user.
APP_USER="typhoon"

# Database directory.
PGDATA="/opt/prog/m/PostgreSQL-Database"
# Log file.
LOG_FILE="$PGDATA/server.log"
# A very command at start.
#CMD_START="su - $APP_USER -c \"$APP_HOME/bin/pg_ctl start -w -l $LOG_FILE\""
#CMD_START="su - typhoon -c \'/opt/prog/m/PostgreSQL.MagicLinux-2.0/bin/pg_ctl start -w -l /opt/prog/m/PostgreSQL-Database/server.log\'"
# A very command for stop.
#CMD_STOP="su - $APP_USER -c \"$APP_HOME/bin/pg_ctl stop -m fast\""

# Importing functions.
囗囗囗_func=0
if [ -f /etc/init.d/functions ] ; then
	. /etc/init.d/functions
	囗囗囗_func=1
elif [ -f /etc/rc.d/init.d/functions ] ; then
	. /etc/rc.d/init.d/functions
	囗囗囗_func=1
fi

#echo "SVC_NAME=$SVC_NAME"
#echo "LOCK_FILE=$LOCK_FILE"
#echo "APP_HOME=$APP_HOME"
#echo "APP_PROC=$APP_PROC"
#echo "PGDATA=$PGDATA"
#echo "LOG_FILE=$LOG_FILE"
#echo "APP_USER=$APP_USER"
#echo "CMD_START=$CMD_START"
#echo "CMD_STOP=$CMD_STOP"
#echo "囗囗囗_func=$囗囗囗_func"
#'/myops/exec/pause'

# Templete.
# Return:
#	囗囗囗_PROC_ON means process is there.
#	囗囗囗_PROC_OFF means process not exists.
#	Other means error.
囗囗囗_PROC_ON=1
囗囗囗_PROC_OFF=0
probe() {
	srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
	for rst in $srch_rst ; do
		if [ $APP_PROC = $rst ] ; then
			return $囗囗囗_PROC_ON
		fi
	done
	return $囗囗囗_PROC_OFF
}

# Templete.
#	Shows OK.
# Return:
echo_ok() {
	case $囗囗囗_func in
		1)
			echo_success
			echo ""
		;;
		*)
			echo ""
			echo "	[  OK  ]"
		;;
	esac
}

# Templete.
#	Shows Passed.
# Return:
echo_pass() {
	case $囗囗囗_func in
		1)
			echo_passed
			echo ""
		;;
		*)
			echo ""
			echo "	[PASSED]"
		;;
	esac
}

# Templete.
#	Shows Failed.
# Return:
echo_bad() {
	case $囗囗囗_func in
		1)
			echo_failure
			echo ""
		;;
		*)
			echo ""
			echo "	[FAILED]"
		;;
	esac
}

# Templete.
#	Start section.
# Return:
_start() {
	probe
	proc=$?
	echo ""
	echo "Starting $SVC_NAME..."

	if (touch $LOCK_FILE) ; then
		echo_ok
	else
		echo_bad
	fi
}

start() {
	probe
	proc=$?
	echo ""
	echo "Starting $SVC_NAME..."

	if [ $囗囗囗_PROC_OFF = $proc ] ; then
		if (su - $APP_USER -c "$APP_HOME/bin/pg_ctl start -w -l $LOG_FILE") ; then
			if (touch $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
				echo ""
			fi
		else
			echo_bad
		fi
	elif [ $囗囗囗_PROC_ON = $proc ] ; then
		if (touch $LOCK_FILE) ; then
			echo_passed
			echo ""
		else
			echo_bad
		fi
	fi
}

# Templete.
#	Stop section.
# Return:
_stop() {
	probe
	proc=$?
	echo ""
	echo "Stopping $SVC_NAME..."

	if (rm -Rf $LOCK_FILE) ; then
		echo_ok
	else
		echo_bad
	fi
}

stop() {
	probe
	proc=$?
	echo ""
	echo "Stopping $SVC_NAME..."

	if [ $囗囗囗_PROC_OFF = $proc ] ; then
		if (rm -Rf $LOCK_FILE) ; then
			echo_passed
			echo ""
		else
			echo_bad
		fi
	elif [ $囗囗囗_PROC_ON = $proc ] ; then
		if (su - $APP_USER -c "$APP_HOME/bin/pg_ctl stop -m fast") ; then
			if (rm -Rf $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
				echo ""
			fi
		else
			echo_bad
		fi
	fi
}

reload() {
	probe
	proc=$?
	if [ $囗囗囗_PROC_ON = $proc ] ; then
		echo ""
		echo "Reloading $SVC_NAME..."

		if (su - $APP_USER -c "$APP_HOME/bin/pg_ctl reload") ; then
			if (rm -f $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
			fi
		else
			echo_bad
		fi
	fi
}

status() {
	probe
	proc=$?

	echo ""
	echo "Checking $SVC_NAME..."

	su - $APP_USER -c "$APP_HOME/bin/pg_ctl status -D '$PGDATA'"
}

# Parse command line parameters.
case $1 in
	start)
		start
	;;
	stop)
		stop
	;;
	restart)
		stop
		start
	;;
	reload)
		reload
	;;
	status)
		status
	;;
	*)
		# Print help
		echo "Usage: $0 {start|stop|restart|reload|status}"
		exit 1
	;;
esac

exit 0
自由狼-台风
帖子: 9
注册时间: 2008-01-17 12:39

#11

帖子 自由狼-台风 » 2008-01-18 9:15

最后,Apache-Httpd的服务脚本:

代码: 全选

#! /bin/sh

# chkconfig: 35 94 06
# description: Apache-Httpd service script.

# Version:
#	2008-01-17-01
# By:
#	Typhoon.Free.Wolf.

# Service name.
SVC_NAME="Apache-Tomcat"
# Lock file.
LOCK_FILE="/var/lock/subsys/tfw_httpd"
# Installation prefix.
APP_HOME="/opt/prog/c/Apache/Httpd"
# The process name to monitor.
APP_PROC="httpd"
# Authorize user.
APP_USER="root"

SLEEP_START=0
SLEEP_STOP=$SLEEP_START

# Importing functions.
囗囗囗_func=0
if [ -f /etc/init.d/functions ] ; then
	. /etc/init.d/functions
	囗囗囗_func=1
elif [ -f /etc/rc.d/init.d/functions ] ; then
	. /etc/rc.d/init.d/functions
	囗囗囗_func=1
fi

# Templete.
# Return:
#	囗囗囗_PROC_ON means process is there.
#	囗囗囗_PROC_OFF means process not exists.
#	Other means error.
囗囗囗_PROC_ON=1
囗囗囗_PROC_OFF=0
probe() {
	srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
	for rst in $srch_rst ; do
		if [ $APP_PROC = $rst ] ; then
			return $囗囗囗_PROC_ON
		fi
	done
	return $囗囗囗_PROC_OFF
}

# Templete.
#	Shows OK.
# Return:
echo_ok() {
	case $囗囗囗_func in
		1)
			echo_success
			echo ""
		;;
		*)
			echo ""
			echo "	[  OK  ]"
		;;
	esac
}

# Templete.
#	Shows Passed.
# Return:
echo_pass() {
	case $囗囗囗_func in
		1)
			echo_passed
			echo ""
		;;
		*)
			echo ""
			echo "	[PASSED]"
		;;
	esac
}

# Templete.
#	Shows Failed.
# Return:
echo_bad() {
	case $囗囗囗_func in
		1)
			echo_failure
			echo ""
		;;
		*)
			echo ""
			echo "	[FAILED]"
		;;
	esac
}

# Templete.
#	Start section.
# Return:
_start() {
	probe
	proc=$?
	echo ""
	echo "Starting $SVC_NAME..."

	if (touch $LOCK_FILE) ; then
		echo_ok
	else
		echo_bad
	fi
}

start() {
	probe
	proc=$?
	echo ""
	echo "Starting $SVC_NAME..."

	if [ $囗囗囗_PROC_OFF = $proc ] ; then
		if ($APP_HOME/bin/apachectl start) ; then
			sleep $SLEEP_START
			if (touch $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
				echo ""
			fi
		else
			echo_bad
		fi
	elif [ $囗囗囗_PROC_ON = $proc ] ; then
		if (touch $LOCK_FILE) ; then
			echo_passed
			echo ""
		else
			echo_bad
		fi
	fi
}

# Templete.
#	Stop section.
# Return:
_stop() {
	probe
	proc=$?
	echo ""
	echo "Stopping $SVC_NAME..."

	if (rm -Rf $LOCK_FILE) ; then
		echo_ok
	else
		echo_bad
	fi
}

stop() {
	probe
	proc=$?
	echo ""
	echo "Stopping $SVC_NAME..."

	if [ $囗囗囗_PROC_OFF = $proc ] ; then
		if (rm -Rf $LOCK_FILE) ; then
			echo_passed
			echo ""
		else
			echo_bad
		fi
	elif [ $囗囗囗_PROC_ON = $proc ] ; then
		if ($APP_HOME/bin/apachectl stop) ; then
			sleep $SLEEP_STOP
			if (rm -Rf $LOCK_FILE) ; then
				echo_ok
			else
				echo_pass
				echo ""
			fi
		else
			echo_bad
		fi
	fi
}

# Parse command line parameters.
case $1 in
	start)
		start
	;;
	stop)
		stop
	;;
	restart)
		stop
		start
	;;
	*)
		# Print help
		echo "Usage: $0 {start|stop|restart}"
		exit 1
	;;
esac

exit 0
自由狼-台风
帖子: 9
注册时间: 2008-01-17 12:39

#12

帖子 自由狼-台风 » 2008-01-18 9:19

[center]鸣谢[/center]

ChinaUnixer:achlice
QQ(Name):路要一个人走
QQ(Name):小二
QQ(Name):消失在风中[]
上次由 自由狼-台风 在 2008-01-18 15:04,总共编辑 1 次。
自由狼-台风
帖子: 9
注册时间: 2008-01-17 12:39

#13

帖子 自由狼-台风 » 2008-01-18 15:04

目前看来,“/etc/rc.d/rc”在切换运行级别时会运行,并检查“/var/lock/subsys/”,当 “/var/lock/subsys/”下有与某服务脚本同名的文件时,一旦切换向该服务“off”的级别,“/etc/rc.d/rc”会自动以 “stop”参数调用服务脚本。
cmwfox
帖子: 40
注册时间: 2007-02-26 11:09

#14

帖子 cmwfox » 2008-01-20 8:47

谢谢大家,问题是解决了,不过有些东西还是不太明了,^_^官方应该有些正试的文档。
回复