...
Command | Description |
---|---|
loaderRunOneJobAttr(attirbuteDef) | Run an attribute definition loader job |
You can run the loader as a linux service so that it auto-starts when the machine boots up
Create a directory for the loader script, pid, and logs (feel free to change dir names etc)
Code Block |
---|
mkdir -p /opt/appserv/grouperLoader
|
Create the bootstrap script: /opt/appserv/grouperLoader/grouperLoader.sh
Code Block |
---|
#!/bin/bash
######################
# customize these vars for your env
pidLocation=/opt/appserv/grouperLoader/grouperLoader.pid
gshBinDirectory=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin
loaderLog=/opt/appserv/grouperLoader/grouperLoader.log
######################
cd $gshBinDirectory
/usr/bin/nohup $gshBinDirectory/gsh -loader > $loaderLog 2>&1 &
echo $! > $pidLocation
|
Create the service script: /opt/appserv/grouperLoader/grouperLoaderService.sh
Code Block |
---|
#!/bin/sh
#
# Startup script for the Tomcat Server
#
# chkconfig: - 86 14
# description: Grouper loader service
# processname:
# pidfile:
# config:
# Tomcat
# description: Keeps Grouper permissions in sync with file on linux server
#################### CUSTOMIZE THIS FOR YOUR ENV #######################
# the user this script should run as
shouldRunAs=appadmin
pidLocation=/opt/appserv/grouperLoader/grouperLoader.pid
#note, this should not contain the gsh command, just the parent directory
gshBinDirectory=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin
#only run on daemon box of cluster. note, customize this for your env
source /home/appadmin/bin/requireDaemon.sh
grouperLoaderBootstrapScript=/opt/appserv/grouperLoader/grouperLoader.sh
# grouperLoaderBootstrapScript is a way to su as the real user to run the loader
# it has these contents
# #!/bin/bash
#
# pidLocation=/opt/appserv/grouperLoader/grouperLoader.pid
# gshBinDirectory=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin
# loaderLog=/opt/appserv/grouperLoader/grouperLoader.log
#
# cd $gshBinDirectory
# /usr/bin/nohup $gshBinDirectory/gsh -loader > $loaderLog 2>&1 &
# echo $! > $pidLocation
########################################################################
# function to kill a pid, wait for exit...
killPid(){
pidToKill=$1
/bin/kill $pidToKill
#loop until the program is dead
waitingForExit=true
iterator=1
while [ "$waitingForExit" == "true" ]; do
processIdToKill=`/bin/ps -fp $pidToKill | grep gsh | grep loader | cut -c10-15`
if [ -n "$processIdToKill" ]; then
echo Waiting for exit...
else
waitingForExit=false
fi
if [ "$iterator" -gt "10" ]; then
waitingForExit=false
fi
let "iterator += 1"
sleep 1
done
processIdToKill=`/bin/ps -fp $pidToKill | grep gsh | grep loader | cut -c10-15`
if [ -n "$processIdToKill" ]; then
/bin/kill -KILL $pidToKill
sleep 1
processIdToKill=`/bin/ps -fp $pidToKill | grep gsh | grep loader | cut -c10-15`
if [ -n "$processIdToKill" ]; then
echo "Cannot kill process: $processIdToKill"
exit 1
fi
fi
}
runningUser=`/usr/bin/whoami`
# we only want appadmin or root to be able to do this
if [ "$runningUser" != "$shouldRunAs" ]; then
if [ "$runningUser" != "root" ]; then
echo "ERROR: only user $shouldRunAs or root can run administer the grouperLoader service: '$runningUser'"
echo
exit 1
fi
fi
case "$1" in
start)
echo "Starting Grouper loader service..."
#if there is a pid file, and it is running, then exit, else delete
if [ -f "$pidLocation" ]; then
pid=`cat $pidLocation`
processId=`/bin/ps -fp $pid | grep gsh | grep loader | grep "$gshBinDirectory" | cut -c10-15`
if [ -n "$processId" ]; then
echo "Grouper loader is already running!"
exit 1
else
echo "PID file exists but loader does not seem to be running"
rm $pidLocation
fi
fi
# make sure there is not a daemon running which is not in sync with PID file
processId=`/bin/ps -f | grep gsh | grep loader | grep "$gshBinDirectory" | grep -v /bin/ps | cut -c10-15`
if [ -n "$processId" ]; then
echo "Alert: Grouper loader is detected to be running, stopping it..."
processToKill=`/bin/ps -f | grep gsh | grep loader | grep "$gshBinDirectory" | grep -v /bin/ps`
echo "Killing: $processToKill"
killPid $processId
fi
# make sure there is not a daemon running which is not in sync with PID file
processId=`/bin/ps -f | grep gsh | grep loader | grep java | grep -v /bin/ps | cut -c10-15`
if [ -n "$processId" ]; then
echo "Alert: Grouper loader is detected to be running, stopping it..."
processToKill=`/bin/ps -f | grep gsh | grep loader | grep java | grep -v /bin/ps`
echo "Killing: $processToKill"
killPid $processId
fi
# if not appadmin, then we must be root
if [ ! "$runningUser" == "$shouldRunAs" ]; then
su $shouldRunAs -c $grouperLoaderBootstrapScript
else
# if not root then we must be appadmin
$grouperLoaderBootstrapScript
fi
echo "Grouper loader is running..."
;;
stop)
if [ -f "$pidLocation" ]; then
pid=`cat "$pidLocation"`
if [ -n "$pid" ]; then
echo "Shutting down loader"
killPid $pid
else
echo "Grouper loader was not running"
fi
rm $pidLocation
else
echo "Grouper loader was not running"
fi
# make sure there is not a daemon running which is not in sync with PID file
processId=`/bin/ps -f | grep gsh | grep loader | grep "$gshBinDirectory" | grep -v /bin/ps | cut -c10-15`
if [ -n "$processId" ]; then
echo "Stopping GSH Grouper load command..."
processToKill=`/bin/ps -f | grep gsh | grep loader | grep "$gshBinDirectory" | grep -v /bin/ps`
echo "Killing: $processToKill"
killPid $processId
fi
# make sure there is not a daemon running which is not in sync with PID file
processId=`/bin/ps -f | grep gsh | grep loader | grep java | grep -v /bin/ps | cut -c10-15`
if [ -n "$processId" ]; then
echo "Stopping GSH Grouper load command..."
processToKill=`/bin/ps -f | grep gsh | grep loader | grep java | grep -v /bin/ps`
echo "Killing: $processToKill"
killPid $processId
fi
echo
;;
status)
if [ -f "$pidLocation" ]; then
pid=`cat "$pidLocation"`
processId=`/bin/ps -fp $pid | grep gsh | grep loader | grep "$gshBinDirectory" | cut -c10-15`
if [ -n "$processId" ]; then
echo "Grouper loader is running under process ID $processId"
else
# make sure there is not a daemon running which is not in sync with PID file
processId=`/bin/ps -f | grep gsh | grep loader | grep java | grep -v /bin/ps | cut -c10-15`
if [ -n "$processId" ]; then
echo "Grouper loader is running from a PID not in the PID file!"
else
echo "Grouper loader is not running"
fi
fi
else
# make sure there is not a daemon running which is not in sync with PID file
processId=`/bin/ps -f | grep gsh | grep loader | grep java | grep -v /bin/ps | cut -c10-15`
if [ -n "$processId" ]; then
echo "Grouper loader is running from a PID not in the PID file!"
else
echo "Grouper loader is not running"
fi
fi
;;
restart)
echo -n "Restarting Grouper loader: "
$0 stop
sleep 5
$0 start
echo "done."
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
|
Set permissions and register the service:
Code Block |
---|
[appadmin@theprince grouperLoader]$ chmod +x /opt/appserv/grouperLoader/grouperLoader.sh
[appadmin@theprince grouperLoader]$ chmod +x /opt/appserv/grouperLoader/grouperLoaderService.sh
[root@theprince init.d]# ln -s /opt/appserv/grouperLoader/grouperLoaderService.sh /etc/init.d/grouperLoader
[root@theprince init.d]# chkconfig --add grouperLoader
[root@theprince init.d]# chkconfig --levels 345 grouperLoader on
|
You can test this by turning on the service, turning it on again, getting the status, etc
Code Block |
---|
[appadmin@mamapalma ~]$ ps -ef | grep gsh
appadmin 856 518 0 17:01 pts/0 00:00:00 grep gsh
[appadmin@mamapalma ~]$ /sbin/service grouperLoader stop
Grouper loader was not running
[appadmin@mamapalma ~]$ /sbin/service grouperLoader status
Grouper loader is not running
[appadmin@mamapalma ~]$ /sbin/service grouperLoader start
Starting Grouper loader service...
Grouper loader is running...
[appadmin@mamapalma ~]$ ps -ef | grep gsh
appadmin 927 1 0 17:01 pts/0 00:00:00 /bin/sh /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/gsh -loader
appadmin 928 927 99 17:01 pts/0 00:00:09 java -Xms64m -Xmx750m -Dgrouper.home=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../ -classpath /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../classes:/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../lib/*: edu.internet2.middleware.grouper.app.gsh.GrouperShellWrapper -loader
appadmin 957 518 0 17:01 pts/0 00:00:00 grep gsh
[appadmin@mamapalma ~]$ more /opt/appserv/grouperLoader/grouperLoader.pid
927
[appadmin@mamapalma ~]$ /sbin/service grouperLoader status
Grouper loader is running under process ID 927
928
[appadmin@mamapalma ~]$ /sbin/service grouperLoader start
Starting Grouper loader service...
Grouper loader is already running!
[appadmin@mamapalma ~]$ cat 123 > /opt/appserv/grouperLoader/grouperLoader.pid
cat: 123: No such file or directory
[appadmin@mamapalma ~]$ echo "123" > /opt/appserv/grouperLoader/grouperLoader.pid
[appadmin@mamapalma ~]$ /sbin/service grouperLoader status
Grouper loader is running from a PID not in the PID file!
[appadmin@mamapalma ~]$ /sbin/service grouperLoader start
Starting Grouper loader service...
PID file exists but loader does not seem to be running
Alert: Grouper loader is detected to be running, stopping it...
Killing: appadmin 927 1 0 17:01 pts/0 00:00:00 /bin/sh /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/gsh -loader
appadmin 928 927 10 17:01 pts/0 00:00:10 java -Xms64m -Xmx750m -Dgrouper.home=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../ -classpath /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../classes:/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../lib/*: edu.internet2.middleware.grouper.app.gsh.GrouperShellWrapper -loader
Alert: Grouper loader is detected to be running, stopping it...
Killing: appadmin 928 1 10 17:01 pts/0 00:00:10 java -Xms64m -Xmx750m -Dgrouper.home=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../ -classpath /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../classes:/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../lib/*: edu.internet2.middleware.grouper.app.gsh.GrouperShellWrapper -loader
Waiting for exit...
Grouper loader is running...
[appadmin@mamapalma ~]$ ps -ef | grep gsh
appadmin 1133 1 0 17:03 pts/0 00:00:00 /bin/sh /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/gsh -loader
appadmin 1134 1133 99 17:03 pts/0 00:00:08 java -Xms64m -Xmx750m -Dgrouper.home=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../ -classpath /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../classes:/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../lib/*: edu.internet2.middleware.grouper.app.gsh.GrouperShellWrapper -loader
appadmin 1164 518 0 17:03 pts/0 00:00:00 grep gsh
[appadmin@mamapalma ~]$ /sbin/service grouperLoader stop
Shutting down loader
Stopping GSH Grouper load command...
Killing: appadmin 1134 1 67 17:03 pts/0 00:00:10 java -Xms64m -Xmx750m -Dgrouper.home=/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../ -classpath /opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../classes:/opt/appserv/tomcat_3b/webapps/grouperWs/WEB-INF/bin/../lib/*: edu.internet2.middleware.grouper.app.gsh.GrouperShellWrapper -loader
Waiting for exit...
[appadmin@mamapalma ~]$ ps -ef | grep gsh
appadmin 1248 518 0 17:03 pts/0 00:00:00 grep gsh
[appadmin@mamapalma ~]$ /sbin/service grouperLoader start
Starting Grouper loader service...
Grouper loader is running...
[appadmin@mamapalma ~]$ /sbin/service grouperLoader status
Grouper loader is running under process ID 1279
[appadmin@mamapalma ~]$ /sbin/service grouperLoader status
Grouper loader is running under process ID 1279
[appadmin@mamapalma ~]$ /sbin/service grouperLoader status
Grouper loader is running under process ID 1280
|
sdf
GrouperShell Variables
...