- Configuring and Starting Node Manager
- Configuring Node Manager for WLST
- Generating Configuration and Key Files for Node Manager
- Start Node Manager.
- Connect to Node Manager using WebLogic Scripting Tool (WLST).
- Have Node Manager start up your WebLogic server instances.
- Connect to Node Manager using WebLogic Scripting Tool (WLST).
- Shutdown WebLogic Server instances.
- Terminate Node Manager.
Give the scripts mentioned below 750 permissions.
1. "startWebLogicServers.py" script connects to Node Manager and starts the WebLogic server instances. Node Manager must be running.
# A Jython script to start the WebLogic server instances.
# This script is for WebLogic Scripting Tool (WLST).
# Node Manager on current machine must be started before running this script.
# The configuration file and the key file can be generated using storeUserConfig() in WLST
# Go into WebLogic Administrator console to find more information about the Node Manager for a specific machine
# Environemnt -> Machines -> <Machine_Name> ->Configuration -> Node Manager
from java.io import FileInputStream;
import java.lang;
import os;
import string;
# Load properties file
propInputStream = FileInputStream("/home/oracle/domain.properties");
configProps = Properties();
configProps.load(propInputStream);
# Get values from properties file
startServerValues = configProps.get("startServerValues");
userConfigFileValue = configProps.get("userConfigFileValue");
userKeyFileValue = configProps.get("userKeyFileValue");
oimHostValue = configProps.get("oimHostValue");
portValue = configProps.get("portValue");
domainNameValue = configProps.get("domainNameValue");
domainDirValue = configProps.get("domainDirValue");
nmTypeValue = configProps.get("nmTypeValue");
verboseModeValue = configProps.get("verboseModeValue");
print 'Invoking WLST';
try:
# Connect to Node Manager on the current machine
nmConnect(userConfigFile=userConfigFileValue, userKeyFile=userKeyFileValue, host=oimHostValue, port=portValue, domainName=domainNameValue, domainDir=domainDirValue, mType=nmTypeValue, verbose=verboseModeValue);
# Determine if WLST is currently connected to Node Manager on the OIM machine
if nm():
#Loop through all the WebLogic Server Instances specified
for serverValue in startServerValues.split("|"):
print 'Current ', serverValue ,' Server Status:';
serverStatus = nmServerStatus(serverValue);
if not serverStatus == 'RUNNING':
#Start WebLogic Server Instance
nmStart(serverValue);
print 'New ', serverValue ,' Server Status:';
nmServerStatus(serverValue);
else:
print 'You are not connected to Node Manager.';
finally:
# Disconnect from Node Manager
nmDisconnect();
exit();
print 'End WLST';
2. "stopWebLogicServers.py" script stops the WebLogic server instances and Node Manager.
# A Jython script to stop the WebLogic server instances.
# Node Manager must be running before executing this script.
# Execute this script using WebLogic Scripting Tool (WLST).
# The configuration file and the key file can be generated using storeUserConfig() in WLST
# Go into WebLogic Administrator console to find more information about the Node Manager
# Environemnt -> Machines -> <Machine_Name> ->Configuration -> Node Manager
from java.io import FileInputStream;
import java.lang;
import os;
import string;
# Load properties file
propInputStream = FileInputStream("/home/oracle/domain.properties");
configProps = Properties();
configProps.load(propInputStream);
# Get values from properties file
stopServerValues = configProps.get("stopServerValues");
userConfigFileValue = configProps.get("userConfigFileValue");
userKeyFileValue = configProps.get("userKeyFileValue");
oimHostValue = configProps.get("oimHostValue");
portValue = configProps.get("portValue");
domainNameValue = configProps.get("domainNameValue");
domainDirValue = configProps.get("domainDirValue");
nmTypeValue = configProps.get("nmTypeValue");
verboseModeValue = configProps.get("verboseModeValue");
print 'Invoking WLST';
try:
#Connect to Node Manager on the current machine
nmConnect(userConfigFile=userConfigFileValue, userKeyFile=userKeyFileValue, host=oimHostValue, port=portValue, domainName=domainNameValue, domainDir=domainDirValue, mType=nmTypeValue, verbose=verboseModeValue);
#Determine if WLST is currently connected to Node Manager on the OIM machine
if nm():
for serverValue in stopServerValues.split("|"):
print 'Current ', serverValue ,' Server Status:';
serverStatus = nmServerStatus(serverValue);
if serverStatus == 'RUNNING':
#Stop WebLogic Server Instance
nmKill(serverValue);
print 'New ', serverValue ,' Server Status:';
nmServerStatus(serverValue);
print 'Stopping Node Manager:';
stopNodeManager();
else:
print 'You are not connected to Node Manager on OIM Machine.';
finally:
#Disconnects WLST from session
exit();
print 'End WLST';
Properties File 1. "domain.properties" contains environment information on Node Manager and WebLogic server instances. Adjust the variable accordingly. The WLST scripts mentioned above read from this file. You may need to change the path location of the domain.properties in the WLST scripts.
# Name of WebLogic servers instances; Each server name is delimited by a pipe; Order matters startServerValues=AdminServer|oim_server1 stopServerValues=oim_server1|AdminServer # Path to configuration file which contains an encrypted username and password userConfigFileValue=/home/oracle/nodeManagerConfig/oracle-WebLogicConfig.properties # Path to key file which contains the secret key used for encrypting and decrpyting the credential in the configuration file userKeyFileValue=/home/oracle/nodeManagerConfig/oracle-WebLogicKey.properties # Host name (Listen Address) of the OIM Node Manager oimHostValue=localhost # Port number of Node Manager portValue=5556 # Name of the WebLogic domain that you want to manage. domainNameValue=oim_domain # Path of the domain directory to which you want to save the Node Manager secret file (nm_password.properties) and SerializedSystemIni.dat file. domainDirValue=/home/oracle/Oracle/Middleware/user_projects/domains/oim_domain # The Node Manager type nmTypeValue=ssl # Verbose mode verboseModeValue=false
Bash Script
The "oimNodeManager" script calls the WLST scripts. It also starts Node Manager on start up. Adjust the variables in the script accordingly. Place this file in the in the "/etc/init.d" directory. Give this script 750 permissions.
Execute the chkconfig command:
sudo /sbin/chkconfig --add oimNodeManager
Base on the chkconfig header defined in the "oimNodeManager", the script will execute on run levels 3 (Multi-user Mode with Networking) and 5 (Multi-user Mode with display manager). Also, the chkconfig add command will create symbolic links of the "oimNodeManager" scripts in the "/etc/rc.d/rc3.d" and "/etc/rc.d/rc5.d" directory.
#!/bin/sh -x
# chkconfig: 35 99 10
# description: Service to start/stop Node Manager and WebLogic server instances
# Oracle Home Directory
ORACLE_HOME=/home/oracle
# Oracle Middleware Directory
MW_HOME=$ORACLE_HOME/Oracle/Middleware
# Linux user to start servers
ORACLE=oracle
# Path to stopWebLogicServers script
WLST_HELPER_STOP_SCRIPT=$ORACLE_HOME/stopWebLogicServers.py
# Path to startWebLogicServers script
WLST_HELPER_START_SCRIPT=$ORACLE_HOME/startWebLogicServers.py
# Lock file
lockfile=/var/lock/subsys/oimNodeManager
# Log File
logFile=/home/oracle/oimNodeManager.log
# Node Manager Port Number
nmPort=5556
case "$1" in
start)
# Check if the startNodeManager, the WLST script, and the WLST helper script exist
if [ ! -f $MW_HOME/wlserver_10.3/server/bin/startNodeManager.sh -o ! -f $MW_HOME/wlserver_10.3/common/bin/wlst.sh -o ! -f $WLST_HELPER_START_SCRIPT ]
then
echo `date +%H:%M:%S` : "Startup scripts do not exist" >> $logFile
exit
fi
# Start Node Manager if it is not running
if ! netstat -atwn | grep "^.*:${nmPort}.*:\*\s*LISTEN\s*$"
then
echo `date +%H:%M:%S` : "Starting NodeManager" >> $logFile
nohup su - $ORACLE -c $MW_HOME/wlserver_10.3/server/bin/startNodeManager.sh >> $logFile &
fi
echo `date +%H:%M:%S` : "Starting Servers" >> $logFile
nohup su - $ORACLE -c "sh $MW_HOME/wlserver_10.3/common/bin/wlst.sh $WLST_HELPER_START_SCRIPT" >> $logFile &
touch $lockfile
;;
stop)
echo `date +%H:%M:%S` : 'Stopping Servers' >> $logFile
netstat -atwn | grep "^.*:${nmPort}.*:\*\s*LISTEN\s*$" >> $logFile
#Check if the WLST script and the WLST helper script exist
if [ ! -f $MW_HOME/wlserver_10.3/common/bin/wlst.sh -o ! -f $WLST_HELPER_STOP_SCRIPT ]
then
echo `date +%H:%M:%S` : "WLST script or WLST helper script does not exist" >> $logFile
exit
fi
echo `date +%H:%M:%S` : "Stopping Servers and Node Manager" >> $logFile
nohup su - $ORACLE -c "sh $MW_HOME/wlserver_10.3/common/bin/wlst.sh $WLST_HELPER_STOP_SCRIPT" >> $logFile &
wait
echo `date +%H:%M:%S` : 'After shutdown script executed' >> $logFile
netstat -atwn | grep "^.*:${nmPort}.*:\*\s*LISTEN\s*$" >> $logFile
rm -f $lockfile
;;
restart)
/bin/sh $0 stop
wait
/bin/sh $0 start
;;
*)
echo "usage: $0 (start|stop|restart)";;
esac
exit
Hi This is a great post. I have tried this in my environment but have issues while invoking startWebLogicServers.py. When I include 'wait' in the service file (oimNodeManager) to complete the start operation, the wlst would not exit at all. But the stop operation is working perfectly fine with the same 'wait' command inside the service file (oimNodeManager). Any idea what could be the reason?
ReplyDeleteAny help is much appreciated.
Thanks