Executing a UNIX shell script using SM49
I have been trying all sorts of things to get this to work and I have been un-successful
I am trying to run the UNIX script using SM49. the command line that I am using is
/test/directory/bin/testmail.sh
the script testmail.sh looks like
#!/bin/ksh
/usr/bin/mailx -s testmail <email address>
I have tried all sorts of combinations to run this script
example
sh /test/directory/bin/testmail.sh
/test/directory/bin/testmail.sh %f
/test/directory/bin/testmail.sh %F
does anyone have any suggestions on how to get this to run successfully. once I get this to run successfully in SM49, I am going to try it in the intregration builder of my PI process.
Hi,
considering authorization issues, you can use
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
commandname = 'LIST_DB2DUMP'
additional_parameters = l_path
operatingsystem = 'UNIX'
TABLES
exec_protocol = lt_btcxpm
EXCEPTIONS
to extract information about files on the server
I used this code to get detailed information for display including the attributes
LOOP AT lt_btcxpm ASSIGNING <btcxpm>
WHERE length > 57
AND ( NOT message+57 CO '. '
OR message+57 = '..' )
AND ( message(1) = 'd' OR
message(1) = 'l' OR
message(1) = '-' ).
l_srvfil-type = <btcxpm>-message(1).
IF l_srvfil-type = '-'.
l_srvfil-type = 'F'.
ENDIF." l_srvfil-type = '-'.
TRANSLATE l_srvfil-type TO UPPER CASE. "#EC TRANSLANG
l_srvfil-file = <btcxpm>-message+57.
CONDENSE l_srvfil-file.
l_srvfil-attri = <btcxpm>-message+1(9).
* l_srvfil-time = <btcxpm>-message+44(12).
l_srvfil-size = <btcxpm>-message+32(11).
APPEND l_srvfil TO lt_srvfil.
ENDLOOP." at lt_BTCXPM assigning <BTCXPM>.
pt_srvfil = lt_srvfil.
For the srvfil information I used this structure
BEGIN OF typ_srvfil,
%_box TYPE flag, "#EC *
type TYPE char01,
attri TYPE isp_rel,
file TYPE file,
name TYPE file,
size TYPE sytleng,
owner TYPE sy-uname,
mod_date TYPE sydatum,
mod_time TYPE syuzeit,
END OF typ_srvfil,
I do not remember exactly how the attribute information is resolved. In Unix all file system authorizations can be set as for the user, the group or for all and it can be read, write, execute granted. If you are no unix expert, ask one or google/wiki for some details.
I wrote a program for navigation, display, and some more functions on the file system which is too big to post here and is not fully system-independent. Not perfect but useful and more than 5 years old. Contact me by mail if you want it.
Regards,
Clemens
Edited by: Clemens Li on Oct 23, 2009 9:16 PM
Similar Messages
-
Error while trying to execute a unix shell script from java program
Hi
I have written a program to execute a unix shell script in a remote machine. I am using J2ssh libraries to estabilish the session connection with the remote box.The program is successfully able to connect and authenticate with the box.
The runtime .exec() is been implemented to execute the shell script.I have given below the code snippet.
try {
File file_location = new File("/usr/bin/");
String file_location1 = "/opt/app/Hyperion/scripts/daily";
String a_mib_name = "test.sh";
String cmd[] = new String[] {"/usr/bin/bash", file_location1, a_mib_name};
Runtime rtime = Runtime.getRuntime();
Process p = rtime.exec(cmd, null, file_location);
System.out.println( "Connected to the server1" );
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = br.readLine();
while(line !=null)
System.out.println(line);
line = br.readLine();
br.close();
p.getErrorStream ().close ();
p.getOutputStream().close();
int retVal = p.waitFor();
System.out.println("wait " + retVal);
//session.executeCommand("ls");
catch (IOException ex) {
I get an error message
Connected to the server
java.io.IOException: Cannot run program "/usr/bin/bash" (in directory "\usr\bin"
): CreateProcess error=3, The system cannot find the path specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at SftpConnect.main(SftpConnect.java:143)
Caused by: java.io.IOException: CreateProcess error=3, The system cannot find th
e path specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
I am sure of the file path where the bash.sh and test.sh are located.
Am i missing something? Any help would be greatly appreciated.
Thanks
SenthilHi, I am using a simple program to connect to a RMI server and execute shell script. I use the Runtime.exec aommand to do the same.
The script is sh /tmp/pub/alka/test.sh /tmp/pub/alka/abc/xyz/ul ul
The script when run from the server, gives no errors. But when ran using rthe above method in java, gives errors as follows,
Mycode:
String command = "/bin/sh /tmp/pub/alka/test.sh /tmp/pub/alka/abc/xyz/ul ul";
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);
int exitVal = proc.exitValue();
System.out.println("Process exitValue: " + exitVal);
java.io.IOException: CreateProcess: /bin/sh /tmp/pub/alka/test.sh /tmp/pub/alka/abc/xyz/ul ul error=3
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at DecryptTest.main(DecryptTest.java:18)
Can anyone please help -
Execute a unix shell script from forms9i
Hi ,
I would like to execute a unix shell script form a form when they pressed a button. The forms server is on Linux machine. I tried but when I pressed the button nothings happen. Could some one please help me how I could get working.
Is there is a way I could execute the unix shell script from PL/SQL proceudre or package.
Please some one help me.
BainYou would not expect to see anything happening because the
script cannot directly send output to the web form. However, you can get it to write output to a file and use web.show_document in the form after the host command to display the file and see the output. -
Execute unix shell script using DBMS_SCHEDULER
Hi,
I am trying run to shell script using DBMS_SCHEDULER.
1) I check..nobody user exist on my HP-UX.
2) I check externaljob.ora on (10.2.0.2.0) also..It has an entry..
run_user = nobody
run_group = nobody
3) I created job successfully and enabled it.
begin
DBMS_SCHEDULER.CREATE_JOB
job_name => 'test_unix_script',
job_type => 'EXECUTABLE',
job_action => '/tmp/test.ksh',
start_date => '08-NOV-2006 04:45:16 PM',
job_class => 'DEFAULT_JOB_CLASS',
enabled => TRUE,
auto_drop => FALSE,
comments => 'test_unix_script.'
END;
EXEC DBMS_SCHEDULER.enable('test_unix_script');
4) test.ksh script had -r-xr-xr-x permission.
5) When I checking dba_scheduler_job_run_details view, ADDITIONAL_INFO column display following error messgae.
ORA-27369: job of type EXECUTABLE failed with exit code: No such file or directory
Did I miss anything?
Any help will be appreciated!!
Thanks..My /tmp/test.ksh trying to find database status.
. ~oracle/.profile > /dev/null
db_status=`eval sqlplus -s 'system/passwd@DEV' << EOF
set pagesize 0 feedback off verify off heading off echo off
select status from v\\$instance;
exit
EOF`
echo $db_status > /tmp/db_status_out -
Can i invoke Unix Shell Script using JSP or Java
Hi
I am working on developing web application .In this application user will upload a file and this file will be stored on server .once the file is saved i have to invoke shell script which triggers the informatica process to read the file content.
Can some please assist me on this. If any one have pseudo code for this it will be of great help
ThanksThis article has example code and explains how to use it.
You should read the entire article first.
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html -
Executing a unix shell script as different OS userid
Hi,
We have installed a Process server in AIX environment using redwood userid. We have scripts running under different OS userids. Please advise how to schedule a job to execute a script(KSH sctipt) to run under a different OS userid ( other than redwood userid). Thanks in advance.
Thanks.
Raj.Hi Gerben,
Thanks for the reply. My process server is running under redwood OS userid. I have a script called "ETL_EXPOERT.SH" created by the OS userid bodipadm. I want to run the script "ETL_EXPOERT.SH" as bodipadm userid. Please advise
1)What credential I have to create for bodipadm userid and what credentials I want to create for redwood userid?.
2)What credentials I want to assign to the script "ETL_EXPOERT.SH"?.
3)To which file I have to set the SETUID option for user switching ?. or where I have to setup the SETUID option?.
Thanks in advance.
Thanks.
Raj. -
Hi all,
Can any body tell me
1) How to get file creation time and
2) whether the file exists or not in UNIX shell scripts
Regards,
PavaniHi Pavani,
Go through this blog, and as mentioned use "Add Time Stamp" to get the file creation time.
/people/sameer.shadab/blog/2005/09/21/executing-unix-shell-script-using-operating-system-command-in-xi
Regards,
Sarvesh -
Java exec() of UNIX shell script
I have a java application that uses:
p = Runtime.getRuntime().exec( cmdLine);
to execute a UNIX shell script, for example:
#!/bin/ksh
. /export/pc112477/freeware/work1/wsEnv
export PATH=/opt/sfw/bin:/usr/ccs/bin:/usr/bin:/usr/ucb:$PATH
cd /export/pc112477/freeware/work1/usr/src/pkgdefs/SFWnmap
/usr/ccs/bin/make -e ROOT=$ROOT install
RESULT=$?
if [ $RESULT = 0 ]
then
echo "Package source"
cd /export/pc112477/freeware/work1/usr/src/pkgdefs/SFWnmapS
/usr/ccs/bin/make -e ROOT=$ROOT install
RESULT=$?
fi
exit $RESULT
Some times the running of the script locks up depending on how much work the script has to, eg. if the make calls pkgmk for a small package it runs okay but if its a large package it locks up in pkgmk.
The script itself works okay if run directly
Does anyone have any ideas on why this locks up and how I could stop it doing it.
ThanksFor anyone who stumbles across this and needs an answer:
To empty the standard error and output, you need to use getErrorStream() and getInputStream() on the Process object created when you execed your command. Create new InputStreamReaders with the streams from the process, then wrap those with BufferedReaders and read each line with a while loop. This is the basic thing you need to do:
try{
Process proc = Runtime.getRuntime().exec(command);
InputStreamReader isr = new InputStreamReader(proc.getErrorStream());
BufferedReader errReader = new BufferedReader(isr);
String line;
while((line = errReader.readLine()) != null)
<do something with each line of error>
} //end try
catch(<errors>) {
<do something with errors>
} //end catch
What you really should do is put the stream handling in a separate class that extends Thread, create an instance for the error and output streams, and start each one. There is a class called StreamGobbler that does this sort of thing. Look at http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html to find out more about it and read a detailed explanation of different problems with exec(). -
Run shell script using Host Command
How do I run Unix Shell Script using Host command?
Please help me......Are you running the shell script from the same box as the forms are deployed in? If not, then HOST call will try to execute on the machine where the forms are hosted(App server).
-
Can i call unix shell script from B2B callout.
Hi,
We had a requirement to invoke a unix shell script from B2B callout implemented class. Here is the code in implementation class:
public void execute(CalloutContext context,List input,List output)
throws CalloutDomainException, CalloutSystemException {
try {
CalloutMessage cmIn = (CalloutMessage)input.get(0);
FileOutputStream fos = null;
String inputFile = "/home/orasoad/digitalsign/input/test.txt";
String outputFile = "/home/orasoad/digitalsign/output/test.txt.gpg";
File outFile = new File(inputFile);
String str =cmIn.getBodyAsString();
fos = new FileOutputStream(outFile);
Writer out = new OutputStreamWriter(fos);
out.write(str);
out.close();
String shellFile = "/home/orasoad/digitalsign/dg.sh";
String cmd[] = new String[] { shellFile, inputFile, outputFile };
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmd);
int i = pr.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
CalloutMessage cmOut = new CalloutMessage(sb.toString());
output.add(cmOut);
} catch (Exception e) {
throw new CalloutDomainException(e);
We were able to execute the unix shell script from standalone java class with same code. But some how it is not working as expected while invoking the B2B java callout.
Is it possible to invoke unix shell script from B2B callout?
Please give inputs.
Regards,Though it's not a good idea to invoke shell scripts from java callout but technically it will work.
But some how it is not working as expected while invoking the B2B java callout.What is not working as expected? Any error in the log (server-diagnostic.log or server.out)?
Regards,
Anuj -
Error while executing unix shell script from java program
Hi All,
I am trying to execute unix shell script from a java program using Runtime.execute() method by passing script name and additional arguments.
Code snippet :
Java Class :
try{
String fileName ="test.ksh";
String argValue ="satish"; // value passed to the script
String exeParam = "/usr/bin/ksh "+fileName+" "+argValue;
Process proc = Runtime.getRuntime().exec(exeParam);
int exitValue = proc.waitFor();
sop("Exit Value is : "+exitValue);
catch(Exception e)
e.printStackTrace();
}Test.ksh
export -- application realated paths..
nohup abc.exe 1> test.log 2>&1;
$1
exit.By running the above java class , i am getting exit Value: 139 and log file test.log of 0 bytes.
when i am running the same command (/usr/bin/ksh test.ksh satish) manually, it's calling abc.exe file successfully
and able generate the logs properly.
Pls let us know where exactly i am stuck..
Thanks in advance,
Regards,
SatishHi Sabre,
As per the guidelines provided by the article, i had done below changes..
InputStream is = null;
InputStreamReader iStreamReader = null;
BufferedReader bReader = null;
String line = null;
try{
String fileName ="test.ksh";
String argValue ="satish"; // value passed to the script
String exeParam = "/usr/bin/ksh "+fileName+" "+argValue;
Process proc = Runtime.getRuntime().exec(exeParam);
is = proc.getErrorStream();
iStreamReader = new InputStreamReader(is);
bReader = new BufferedReader(iStreamReader);
System.out.println("<ERROR>");
while((line = bReader.readLine()) != null)
System.out.println("Error is : "+line);
System.out.println("</ERROR>");
int exitValue = proc.waitFor();
sop("Exit Value is : "+exitValue);
catch(Exception e)
e.printStackTrace();
Now , it's showing something like..
<ERROR>
</ERROR> -
How to execute unix shell script from Java ...
Hi,
Anyone know how to execute unix shell script from Java?
Suppose I have several shell scripts written in perl or tcl or bash.
I just want to catch the output of that script.
Is there any ready to use module/object for this?
Please let me know, this is quite urgent for my study assigment.
Thanks in advance,
Regards,
meLook up Runtime.exec()
-
How to execute unix shell script in webdynpro?
hi all,
We have some iquirement of executing script in unix.If anyone know How to execute unix shell script in webdynpro?
best regard
reefishRee,
1. Find SSH client for windows, then execute SSH with Runtime.exec() on local host with arguments like remote host, auth, command to execute etc.
2. Get SSH client in Java and execute SSH commands on remote host using pure Java API.
Don't ask me for links, Google works today, I checked this
Valery Silaev
SaM Solutions
http://www.sam-solutions.net -
Executing Unix shell scripts with DBMS_SCHEDULER
I have the following Unix shell script create_backup_file.sh:
#!/usr/bin/ksh
/usr/bin/ssh [email protected] /usr/bin/touch/app_home/home/trotestbat/scripts/TRO_batch_complete_`date +%d-%m-%Y-%H%M`
If I execute this from the command prompt it creates the file on the remote server.
I've used dbms_scheduler to try and execute this from Oracle:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
program_name => 'CREATE_TRO_BACKUP_FILE'
,program_type => 'EXECUTABLE'
,program_action => '/APP/TORPEDO/DTE/SCRIPTS/create_backup_file_tro.sh'
,number_of_arguments => 0
,enabled => TRUE
,comments => NULL
SYS.DBMS_SCHEDULER.CREATE_JOB
job_name => 'DTE.TESTAGAIN'
,start_date => TO_TIMESTAMP_TZ('2010/05/17 16:09:24.710789 +01:00','yyyy/mm/dd
hh24:mi:ss.ff tzh:tzm')
,repeat_interval => NULL
,end_date => NULL
,program_name => 'DTE.CREATE_TRO_BACKUP_FILE'
,comments => NULL
END;
The problem I have is that scheduler executes the shell script and creates the file but it never completes the job. The status of the job is permanently 'RUNNING'. Why is the scheduler not returning a completed status?the "infinite" script is usually caused by a prompt (script pauses for a user input).
Please keep in mind that executing script via scheduler is not the same as manually via prompt.
1. the script runs as ORACLE user ID (or whatever you specified using DBMS_SCHEDULER.create_credential or/and "$ORACLE_HOME/rdbms/admin/externaljob.ora")
2. the environment variables are probably not the same.
My wild guess is that you never ran SSH using "oracle" UID and thus it prompts for permission to add the remote computer’s fingerprint to the user’s ~/.ssh/known_hosts file - since it is a script, it just hangs and waits for input.
Did you try to login to unix box as oracle uid and run the script manually? -
Executing java from unix shell script
Hi, I am trying to execute java program from a unix shell script and the program has a command line parameter. I have tried in ways like
/opt/java1.4/bin/java CollExtractLoadProcess /home/inbox/archive/file_name
/opt/java1.4/bin/java CollExtractLoadProcess "/home/inbox/archive/file_name"
/opt/java1.4/bin/java CollExtractLoadProcess '/home/inbox/archive/file_name'
/opt/java1.4/bin/java CollExtractLoadProcess file_name
No matter how I execute it gives me the following error
Exception in thread "main" java.lang.ClassFormatError: CollExtractLoadProcess (C
ode segment has wrong length)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Could someone please let me know what is the correct way of doing this?
Thanks.Sounds like you either have a corrupt class file or you're using an older version of the JVM to try to execute classe that were compiled for a newer version.
Maybe you are looking for
-
Did I lose all of my data trying to install XP in Bootcamp???
Ok so I need to know if I am out of luck! I have been using Parallels but decided to use Boot camp. I went through the process of partitioning 12 or 13GB for Windows XP in the Boot camp app within OSX and then rebooted as it told me and put in the Wi
-
I have a i-phone 5s which i got recently. Everytime i try to update my apps that i got on my 4s on the new5s i get message to fill in a password for some unknown gmail id. How do I get my apple id back for my apps?
-
How to avoid the annoying little window that opens when I go to close a file?
When I put my cursor near the x of a file tab to close a file, a little window opens over the x and I have to wait for it to dissappear before I can click on the x to close the file. The window that opens has the exact same text as the folder tab and
-
Is it possible to find the creation date of a contact in icloud?
I would like to find the creation date of a contact in icloud, I don't know if it's possible ? many thanks
-
I created some custom folders in my business area and they were all valid, but when I log in as a user I can not see the custom folders but the other folders are there. please can someone tell me what I am doing wrong. thank you.