Sun ONE Application Server 作为 Solaris 的一部分进行安装时,Application Server 启动时会出现多个问题:
所有应用程序服务器和管理服务器实例都会在 Solaris 系统启动过程中自动启动。在许多环境中,用户并不希望所有实例都在 Solaris 系统启动过程中自动启动,因为启动每个定义的实例都会对系统的可用内存产生不利影响。
应用程序服务器实例和管理服务器实例自动启动时,每个实例的启动脚本都作为根执行。执行不属于非根用户的实例启动脚本时,非根用户可以通过修改实例级启动脚本来访问根用户。
在安装 Sun ONE Application Server 的过程中,会安装 /etc/init.d/appserv 脚本以及 /etc/rc*.d/ 目录中 S84appserv 和 K05appserv 脚本的符号链接。这些脚本导致所有应用服务器实例和管理服务器实例(定义为应用程序服务器安装的一部分)随着 Solaris 系统的启动和停机而自动启动和停止。
/etc/init.d/appserv 脚本包含以下代码段:
case "$1" in 'start') /usr/sbin/asadmin start-appserv ;; 'stop') /usr/sbin/asadmin stop-appserv ;;
执行 asadmin start-appserv 命令导致管理服务器实例和(所有管理域中定义的)所有应用程序服务器实例在 Solaris 系统启动过程中启动。由于系统启动和停机脚本是作为根执行的,所以每个应用程序服务器和管理服务器实例的启动脚本也作为根执行。实例级启动脚本的名称为 startserv,位于 instance-dir/bin/startserv 中。因为非根用户也可以拥有实例,所以非根用户可以修改 startserv 脚本,作为根用户执行命令。
如果实例使用具有特权的网络端口,则该实例的 startserv 脚本必须作为根执行。但是,在根用户最初启动实例后,实例的配置中通常会设置 run as user,强制使实例以指定的用户运行。
解决方法:根据您的环境,执行以下解决方法之一。
如果您的环境不要求所有应用程序服务器实例和管理服务器实例作为根启动,则注释掉 /etc/init.d/appserv 脚本中的 asadmin start-appserv 和 asadmin stop-appserv 命令。
如果您的环境要求启动特定管理域或者启动一个或多个管理域中的特定实例,您可以修改或创建脚本来自动执行该过程。请注意,“特定管理域”包括每个域的管理服务器实例和所有应用程序服务器实例。
修改 /etc/init.d/appserv 脚本,启动所需的域或实例。
根据环境的需要,定义新的 /etc/rc*.d/ 脚本。
启动注意事项:要自动启动特定的应用程序服务器管理域或特定的应用程序服务器实例,在修改 Solaris 操作环境启动脚本时,请注意以下事项。
启动特定的域 – 如果要以根用户启动管理服务器实例和全部应用程序服务器实例,请按如下所示修改 /etc/rc*.d/ 脚本。
case "$1" in 'start') /usr/sbin/asadmin start-domain --domain production-domain ;; 'stop') /usr/sbin/asadmin stop-domain --domain production-domain ;;
以非根用户启动特定的应用程序服务器实例 – 使用带有 -c 选项的 su 命令修改 /etc/rc*.d/ 脚本。
case "$1" in 'start') su - usera -c "/usr/sbin/asadmin start-instance --domain test-domain instance-a" su - userb -c "/usr/sbin/asadmin start-instance --domain test-domain instance-b" ;; 'stop') su - usera -c "/usr/sbin/asadmin stop-instance --domain test-domain instance-a" su - userb -c "/usr/sbin/asadmin stop-instance --domain test-domain instance-b" ;;
有关通过 asadmin 命令行界面使用 startup 和 shutdown 命令的详细信息,请参见《Sun ONE Application Server 7 Administrator's Guide》。