Some PeopleSoft systems generate interfaces files that are then delivered to other systems by other shell scripts. These scripts may simply be initiated by the UNIX cron facility. The problem with this is that the scripts run irrespective of whether the PeopleSoft process that generated the interface file ran and completed successfully.
It is possible to use the Process Scheduler to run operating system commands, and to have those command interact appropriately with the generic Process Scheduler functionality.
Process Type Definition
First you need to create a new process type, I chose to call it ‘Shell Script’, that will run a named shell script, psft.sh. This wrapper script performs the interaction with the Process Scheduler and it in turn calls the script that is to be executed. The name of the database, the access ID and password, and the process instance are passed to the wrapper. Other parameters will be appended in the individual Process Definition.
Process Definition
It is necessary to create a Process Definition for each system command or script that is to be executed by the Process Scheduler. You could simply run the command directly from the Process Scheduler but then it could not be API aware, and the status in the Process Monitor will always be success when it script completes. When using the wrapper script, the API Aware check box should be checked.
The name of the script of system command and any parameters should be APPENDED to the command line defined in the Process Type definition, as shown below.
Wrapper Script (psft.sh)
This is the wrapper script that is specified in the Process Definition.
The newly defined Process can be run just as any other process is usually run. Any output from the script on the standard output channel is captured by the Process Scheduler and written to a logfile that can then be viewed from the View Log/Trace facility within Process Monitor.
Two files are shown in the Process Monitor.
• OTH_DMKTEST_1561.log is the standard output of the script that was captured by the Process Scheduler.
• dmktest.log is a file emitted by the called shell script dmktest.sh to the reporting directory.
Demonstration
This is the test script called by the Process Definition DMKTEST.
banner "HelloWorld" BASENAME=$(basename $0 .sh) if [ -d "${PSPRCSLOGDIR}" ] ; then echo "This script is running under Process Scheduler" cp $0 ${PSPRCSLOGDIR}/${BASENAME}.log else echo "This script is not running under Process Scheduler" fi exit $*
This is the standard output of the script found in file OTH_DMKTEST_1561.log
/usr/local/bin/psft.sh:/usr/local/bin//dmktest.sh 0 Mon 2 Jul 11:53:15 2007 Setting process request 1561 to status 7 # # # # # # ###### # # #### # # # #### ##### # ##### # # # # # # # # # # # # # # # # # ####### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # ##### # # # # # # # # # # # # # # # # # # # # # # ###### ###### ###### #### ## ## #### # # ###### ##### This script is running under Process Scheduler Setting process request 1561 to status 9 Mon 2 Jul 11:53:16 2007
A more detailed version of this document can be found at http://www2.go-faster.co.uk/docs/process_scheduler_shell_scripts.pdf
Please not this blog is not a support site. Please do not use the comments to ask for support on this script, you can contact me directly. You will need a basic knowledge of Unix shell scripting to use this technique.
16 comments :
Hi -
This was a great find. I'm trying to implement, but PeopleSoft doesn't seem to be kicking off the script. I can pull the parameters from the process monitor and issue that command, and everything runs perfectly. When kicked off from process schedule, though, I get no joy - stays in queued and nothing kicks off on the server.
Would really appreciate some assistance. cayce -dot- balara -at- crowley.com
Never mind, my bad - recycled my process scheduler and all is well.
Thanks again - great tip!
You wouldn't happen to have a similar wrapper script from windows commands?
Great tip. In the override options, how can we pass multiple parameters to the unix script? I only see first one (parm1) I have tried
/scripts/bobtest.sh parm1 parm2 parm3
/scripts/bobtest.sh parm1, parm2, parm3,
/scripts/bobtest.sh %parm1 %parm2 %parm3
Thanks
Opps...Helps if you save the called unix script ;) scripts/bobtest.sh BOB Was Here
banner "HelloWorld"
BASENAME=$(basename $0 .sh)
if [ -d "${PSPRCSLOGDIR}" ]; then
echo "This script is running under Process Scheduler"
echo "value = " $1
echo "value = " $2
echo "value = " $3
cp $0 ${PSPRCSLOGDIR}/${BASENAME}.log
else
echo "This script is not running under Process Scheduler"
fi
exit $*
This script is running under Process Scheduler
value = BOB
value = was
value = here
Setting process request 7691 to status 9
Sat Sep 13 09:45:44 EDT 2008
Hi
Is this technique capable of doing Sftp as well ?
I have shell script that has sftp command.
When i run that this way it says "sftp command not found".It runs succesfully through crontab though......
Any ideas......
If you can script it, you can run from the Process Scheduler. Problems like this are often down to environment and path. Try listing the environment variables with either set or env. I sometimes use set -x to see how execution of the script progresses.
Hi
I could resolve the "sftp command not found" error..However when i run the shell script from process scheduler it says "Couldn't wait for ssh process: No child processes"
Result - Process monitor run status is error.SFTP shell script process and does get the file transfer job, though this is only visible through crontab
Think i got real close and stuck with this last one
any inputs ......
Krishna,
were you able to solve the "Couldn't wait for ssh process: No child processes" issue?
Thanks in advance,
Chris
Is there a way to hide the password from command line?
Kicked off from the Process Scheduler, the from command line issued: ps -ef|grep uv
Results (password replaced with x's)
psadmin 934092 1282132 10 11:40:52 - 0:06 /bin/ksh /u01/psoft/psenv/CSDEV/UVAcust/scripts/uv_sf_nelnet_billfile_ftp.sh bobtest rs2wq SYSADM/xxxxxxxx@CSDEV
psadmin 1282132 1683642 0 11:40:52 - 0:00 /bin/ksh /u01/psoft/psenv/CSDEV/UVAcust/scripts/uv_psft.sh CSDEV SYSADM xxxxxxxx 36173 bobtest rs2wq /u01/psoft/psenv/CSDEV/UVAcust/scripts/uv_sf_nelnet_billfile_ftp.sh
Parameter List:
%%DBNAME%% %%ACCESSID%% %%ACCESSPSWD%% %%INSTANCE%% %%RUNCNTLID%% %%OPRID%%
Hi
Nopes , no luck with the "Couldn't wait for ssh process: No child processes" issue .this comes while running the SFTP scripts through the proces scheduler.
If you have any solution do let me know.
Thanks
This is pretty awesome. Thanks a lot David.
Hi David, we met a few years back - do you remember coming to Perot Systems? Anyway, I have a question about Unix Scripts and report distribution. It seems like the report distribution feature only works for generic process types of SQR and App Engine. Using OTH for Unix scripting does not allow saving the report distribution (User or role)values when I run the job. When I trace this, I'm not finding anywhere this is being saved, so my fear is that this information is being deleted/saved within Peoplesoft propietary code which we don't have access to. I did update the process output destination type to defalut to Web as Web and Client are the only two that allow this functionality. Any ideas?
Hi David,
I think I spotted a minor problem in your psft.sh script, where it updates the PSPRCSRQST table with status 7. At that point the variable PRCSRTNCD doesn't have a value which makes the sql fail. Giving it an initial value of 0 does the job.
Great script. I've been writing a lot of stuff over the past months that I can bring into the PeopleSoft envionment now.
I noticed some issues with ssh/sftp in other posts. We have similar situations, so if I get that to run, I'll post another comment.
I have corrected the script in this blog posting, and uploaded a new script to the Go-Faster website.
Hi David, I have worked with you in BT. I am getting the error when i try to run the script via process scheduler as you can see from the log. But i am able to successfully execute from unix.
/local/apps/psoft/DEVM/pt849_hcm/bin/psft.sh:sh sdtest.sh 0
Sat Sep 4 00:36:24 BST 2010
Linux hwl027a002 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
parameter 1: begindttm parameter 2: 7
PRCSINSTANCE : 1226516
Setting process request 1226516 to status 7
prcsapi: /local/apps/psoft/DEVM/pt849_hcm/bin/psft.sh[53]: sqlplus: not found
RETURN CODE: 127
SQL *Plus Error Return code: 0
Sat Sep 4 00:36:24 BST 2010
welcome
Sat Sep 4 00:36:24 BST 2010
parameter 1: enddttm parameter 2: 9
PRCSINSTANCE : 1226516
Setting process request 1226516 to status 9
prcsapi: /local/apps/psoft/DEVM/pt849_hcm/bin/psft.sh[62]: sqlplus: not found
RETURN CODE: 127
SQL *Plus Error Return code: 0
Sat Sep 4 00:36:24 BST 2010
Post a Comment