Avatar billede babelfish Nybegynder
02. februar 2005 - 01:37 Der er 8 kommentarer

Kalde UNIX funktionalitet fra JSP side på server under windows.

Hejsa,

Jeg skal have en JSP side på en Tomcat server under WinXP, til at kalde noget funktionalitet (et script) der skal køre under UNIX.
Jeg har prøvet at gøre det via Cygwin og få den til at afvikle et bash script. Altså jeg kalder en metode i min javabean der så skulle "starte" cygwin og afvikle scriptet, som følgende:

runCommand(String cmd2){
  String[] cmd = {"cmd", "/C", "c:/cygwin/bin/bash --login -i ./script.sh"};
  Process proc = Runtime.getRuntime().exec(cmd);
  ...
  proc.waitFor();
  ...
  }

Men det vil den ikke være med til!

Er der en fornuftig måde at slippe afsted med at gøre det på?

Jeg kan have UNIX maskine til rådighed på mit interne netværk, men ved ikke lige hvordan jeg "rammer" maskinen, endnu mindre hvordan jeg får scriptet afviklet.

Jeg håber nogen kan hjælpe, og helst snart :-)
Avatar billede arne_v Ekspert
02. februar 2005 - 07:56 #1
Det er ikke kønt at bruge Runtime exec i en JSP side, men medmindre
du har strammet sikkerheden i Tomcat så mener jeg at det bør virke.

Så det er nok i scriptet udførslen at problemet ligger.

Virker scriptet hvis du kører det fra en komamndo prompt ?
Avatar billede babelfish Nybegynder
02. februar 2005 - 12:34 #2
Scriptet virker fint når jeg kører det fra en cygwin konsol. men jeg har lige opdaget at det vil heller ikke køre hvis jeg afvikler koden, altså: "cmd /c c:\cygwin\bin\bash --login -i ./script.sh", direkte fra windows kommandoprompt?!?

Kan man ikke kalde videre hvis man starter cygwin således?
Avatar billede arne_v Ekspert
02. februar 2005 - 12:41 #3
Virker:

"c:\\cygwin\\bin\\bash --login -i ./script.sh"

?
Avatar billede babelfish Nybegynder
02. februar 2005 - 13:37 #4
Nope!
Jeg har lige prøvet: "cmd /c c:\\cygwin\\bin\\bash --login -i mkdir xxx" direkte fra windows run command.
Hvilket gerne skulle generere en mappe ved navn xxx i mit cygwin home dir, men det gør det ikke!
Avatar billede arne_v Ekspert
02. februar 2005 - 15:28 #5
Jeg tror at Java->Cygwin->Unix er lige at stramme buen en tand for meget.

Så her kommer et helt alternativt approach.

Hent Jakarta Commons Net og brug dens klasser med rexec/rsh funktionalitet til
at køre noget pådin Unix maskine med.
Avatar billede babelfish Nybegynder
02. februar 2005 - 21:09 #6
Hvis jeg nu afvikler det hele på en UNIX/Linux maskine, hvordan får jeg så afviklet kommandoer via bash shell, jf. ovenstående, fra mit java program?

Jeg har prøvet med:
public doStuff(String fileName)
    Runtime rtime = Runtime.getRuntime();
        // Eksempel
    Process child = rtime.exec("/bin/bash -c ls -l > sometextfile.txt");
    child.waitFor();
}

Hvilket skulle smide en directorylisting over i en fil, men det kan jeg heller ikke få til at virke...

Nogen ideer?
Avatar billede arne_v Ekspert
02. februar 2005 - 21:20 #7
På Unix plejer man at skulle bruge et string array - altså hver del af kommando
linien i et element i string array
Avatar billede babelfish Nybegynder
02. februar 2005 - 23:37 #8
jeg kan ikke umiddelbart få det til at virke.
Kan du evt. smide et eksempel på noget kode du ved der virker?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester