我有一个要求,需要从 scala 或 java 程序启动 tomcat、nginx、kafka 等,我可以通过 java 程序检查它们是否正在运行或未使用,ps-ef| grep name
但如果它们未运行,我希望它们从 java 或 scala 程序自行启动,我在 tomcat 上试过这个
val pr = Runtime.getRuntime.exec(Array[String]("/home/administrator/Desktop/apache-tomcat-8.0.5/bin","-c","echo def123@| sudo -S startup.sh"))
但它不起作用,所以有什么可以帮我解决的吗!!!!
答案1
主要问题似乎在于 的使用sudo
。您需要gksudo
。
一个简单的 Scala 示例
package com.askubuntu.users.aamir
import scala.sys.process._
object startProcess {
def main(args: Array[String]) {
Process("ls -la")!
}
}
或者使用sudo
-rights (你需要gksudo
)
package com.askubuntu.users.aamir
import scala.sys.process._
object startProcess {
def main(args: Array[String]) {
Process("gksudo nautilus")!
}
}
并加入一些 Java 元素
package com.askubuntu.users.aamir
object startProcess {
def main(args: Array[String]) {
Runtime.getRuntime.exec(Array[String]("gksudo","nautilus"));
}
}
下面是启动进程的 Java 方法
package com.askubuntu.users.aamir;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class startProcess {
public static void main(String[] args) {
BufferedReader in;
PrintWriter out = new PrintWriter(System.out);
try {
Process p = Runtime.getRuntime().exec(new String[]{"/home/administrator/Desktop/apache-tomcat-8.0.5/bin","-c","echo def123@| sudo -S startup.sh"});
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String text;
while ((text = in.readLine()) != null) {
out.println(text);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
或者
package com.askubuntu.users.aamir;
import java.io.IOException;
public class startProcess {
public static void main(String[] args) {
try {
Runtime.getRuntime().exec(new String[] { "gksudo","nautilus", "/tmp" });
} catch (IOException e) {
e.printStackTrace();
}
}
}