如果 Sun ONE Application Server 作为 Solaris 的一部分进行安装,则 Application Server 启动时会出现多个问题:
所有应用服务器和管理服务器实例都会在 Solaris 系统启动过程中自动启动。 在许多环境中,用户并不希望所有实例都在 Solaris 系统启动过程中自动启动, 因为启动每个定义的实例都会对系统的可用内存产生不利影响。
应用服务器实例和管理服务器实例自动启动时,每个实例的启动脚本都作为 root 执行。 执行不属于非 root 用户的实例启动脚本时,非 root 用户可以通过修改实例级启动脚本来访问 root 用户。
在安装 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 系统启动过程中启动。 由于系统启动和停机脚本是作为 root 执行的,因此每个应用服务器和管理服务器实例的启动脚本也作为 root 执行。 实例级启动脚本的名称为 startserv,位于 instance-dir/bin/startserv 中。 因为非 root 用户也可以拥有实例,所以非 root 用户可以修改 startserv 脚本,作为 root 用户执行命令。
如果实例使用具有特权的网络端口,则该实例的 startserv 脚本必须作为 root 执行。 但是,实例的配置中通常会设置 run as user, 以强制实例在 root 用户第一次启动该实例后以指定的用户身份运行。
解决方法:根据您的环境,执行以下解决方法之一:
如果您的环境不要求所有应用服务器实例和管理服务器实例都作为 root 启动,则注释掉 /etc/init.d/appserv 脚本中的 asadmin start-appserv 和 asadmin stop-appserv 命令。
如果您的环境要求启动特定管理域或者启动一个或多个管理域中的特定实例,您可以修改或创建脚本来自动执行该过程。 请注意,特定管理域包括每个域的管理服务器实例和所有应用服务器实例。
执行以下操作之一:
修改 /etc/init.d/appserv 脚本,启动所需的域或实例。
根据环境的需要,定义新的 /etc/rc*.d/ 脚本。
启动注意事项:要自动启动特定的应用服务器管理域或特定的应用服务器实例,在修改 Solaris 软件启动脚本时,请注意以下事项:
启动特定的域 – 如果要以 root 用户身份启动特定管理域中的管理服务器实例和所有应用服务器实例,请按如下所示修改 /etc/rc*.d/ 脚本:
case "$1" in 'start') /usr/sbin/asadmin start-domain --domain production-domain ;; 'stop') /usr/sbin/asadmin stop-domain --domain production-domain ;;
以非 root 用户身份启动特定的应用服务器实例 – 修改 /etc/rc*.d/ 脚本以使用带有 -c 选项的 su 命令。
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 命令的详细信息,请参见 http://docs.sun.com/db/prod/s1.asse 上的《Sun ONE Application Server 7 管理员指南》。