2012-04-21 53 views
0

你好,我需要一个IP地址,SSH和通过shell脚本运行 我的Java代码,我通过这种方式SSH -ing和编译java程序

ssh $LINE java -Djava.library.path=/N/u/sbpatil/ds/Project4/demons/Project4Lib -cp "/N/u/sbpatil/ds/Project4/demons:/N/u/sbpatil/ds/Project4/demons/Project4Lib/jug-uuid.jar:/N/u/sbpatil/ds/Project4/demons/Project4Lib/NaradaBrokering.jar:/N/u/sbpatil/ds/Project4/demons/Project4Lib/sigar.jar" PublisherClient >> output2 & 

但输出2文件中不存在任何输出做到这一点。即使java的运行命令给我一个错误,该错误应该写入该文件中,但它不会被写入。 任何人都可以请告诉我,我应该如何写这个脚本?

+0

而不是在一行中做所有事情,你可以先ssh登录到远程机器,然后在那里启动java命令?这样可以更容易地进行调试,因为很清楚哪个部分的命令发生在哪台机器上,例如,我不知道这个'>>是在远程机器上还是在你的机器上完成的...... – cello 2012-04-21 18:29:04

+1

错误不会写入输出文件,除非你在最后&否则output2将仅包含标准输出。 – Richante 2012-04-21 18:31:01

+0

实际上该文件是一个共享文件系统,以便>>命令将文件访问到所有节点.. – 2012-04-21 18:48:45

回答

2

现在看起来你在后台运行ssh,将输出重定向到本地文件。 将命令行放入''中:ssh $LINE 'java ... 1>>output2 2>&1 &'

如果以这种方式启动应用程序,也可以使用nohup

+0

你能告诉我2>&1&谢谢的意义! – 2012-04-21 20:41:52

+0

2>&1将STDERR(Java中的System.err,默认打印堆栈跟踪)重定向到STDOUT(System.out,通常打印的地方)。因此,通过执行'2>&1',您可以在同一个文件中捕获所有可能的输出。很明显,你可能会写入不同的文件,但通常在启动后台进程时,重定向两者是个好主意。 – 2012-04-21 20:58:50