2011-07-15 3 views
1

Je crée une application qui va transférer un certain nombre de fichiers d'une boîte Unix à une autre boîte Unix. Je vais devoir exécuter des fichiers shell à partir de Java à distance.API Java pour Unix

Existe-t-il une API à cette fin? Ou y a-t-il quelque chose dans Java même?
Je ai googlé un peu, mais je n'ai rien trouvé dans ce but.

EDIT - Désolé, j'oublié de mentionner que mon programme Java est en cours d'exécution sur la machine de Windows, tandis que les boîtes Unix sont à distance.

+0

qui est une exigence assez grande pour manquer la première passe ... :) – sdolgy

+0

Oui, désolé, je griffonné rapidement ce qui est venu à mon esprit. – Sid

Répondre

1

Je pense que vous trouverez peut-être une bibliothèque Java SSH utile. Cela permettra à votre ptogram de copier des fichiers (comme scp ou sftp) et d'exécuter des commandes à distance (comme ssh).

http://www.jcraft.com/jsch/ est un exemple. Il y en a d'autres.

+0

Désolé j'ai oublié en mentionnant que mon programme Java sera en cours d'exécution sur la machine Windows, tandis que les boîtes Unix sont à distance. – Sid

+1

L'exécution de Java sur Windows ne sera pas un problème. jsch est une implémentation "pure Java" et ne dépend donc pas de l'existence de programmes "ssh" sur votre machine locale. La copie d'une UNIX distante vers une autre UNIX distante peut être effectuée sous la forme d'une copie en deux étapes (copie de la version distante A vers la version locale, copie de la version locale vers la version B distante). Ou vous pouvez utiliser jsch pour lancer une commande "scp" ou "rsync" sur l'une des boîtes UNIX. –

5

ne pourriez-vous utiliser le Runtime.getRuntime().exec("cp -r stuff.txt [email protected]:/home/");? Ou cherchez-vous quelque chose à interfacer spécifiquement avec les commandes shell Unix?

Here est et exemple d'exécution des commandes OS en java.

J'ai essayé en cours d'exécution, mais Runtime.getRuntime().exec("ls -lrt /tmp/*2302312* [email protected]"); jeté l'erreur suivante:

java.io.IOException: Cannot run program "ls":CreateProcess error=2, The system cannot find the file specified 
java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 
+2

Vous pouvez utiliser ceci et mettre en réseau ensemble pour créer un environnement qui permettrait à toute commande d'être exécutée à partir de l'autre machine. En utilisant quelque chose comme: String s = ; Runtime.getRuntime(). Exec (s); Selon la sécurité de l'environnement, je ne le ferais PAS si je ne savais pas comment le garder sécurisé! +1 pour la mention, de toute façon. C'est ainsi que je le ferais, avec beaucoup de sécurité des deux côtés. –

+0

@Zeychin: bon point sur la sécurité (+1) –

+1

'cp -R stuff' travail ne sera probablement pas de « l'une à l'autre boîte unix » sauf si vous avez des actions mis en place ou NFS ... – sdolgy

2

Il y a Java Remote Method Invocation. Que cela soit approprié dépend des services fournis par le serveur.

+0

Cela semble être le moyen le plus sûr d'aller, sans beaucoup (autant) de votre propre codage de sécurité personnalisé. –

+0

Désolé j'ai oublié en mentionnant que mon programme Java sera en cours d'exécution sur la machine Windows, tandis que les boîtes Unix sont à distance. – Sid

1

Any good rsync library for Java?

Cela peut être ce qui peut résoudre votre problème de « boîte unix boîte unix »

+0

Désolé j'ai oublié en mentionnant que mon programme Java sera exécuté sur la machine Windows, tandis que les boîtes Unix sont à distance. – Sid