要在Linux上使用Java通过密钥连接到远程服务器,检查Tomcat服务是否启动,如果没有启动则执行对应目录下的启动脚本,你可以使用JSch库和Java的ProcessBuilder来实现这个逻辑。
首先,确保你的Java项目中包含JSch库,你可以在Maven项目中通过以下依赖添加JSch:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version> <!-- 或者适当的版本 -->
</dependency>
然后,你可以使用以下Java代码来实现这个逻辑:
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RemoteTomcatManager {
private static final String TOMCAT_HOST = "your_remote_host"; // 远程Tomcat所在的主机
private static final String TOMCAT_USER = "your_ssh_user"; // SSH登录用户名
private static final String TOMCAT_PRIVATE_KEY_PATH = "/path/to/your/private/key"; // SSH私钥路径
private static final String TOMCAT_START_SCRIPT = "/path/to/your/tomcat/startup.sh"; // Tomcat启动脚本的路径
public static void main(String[] args) {
if (isTomcatRunning()) {
System.out.println("Tomcat is running.");
} else {
System.out.println("Tomcat is not running. Starting Tomcat...");
startTomcat();
}
}
private static boolean isTomcatRunning() {
try {
JSch jsch = new JSch();
jsch.addIdentity(TOMCAT_PRIVATE_KEY_PATH);
Session session = jsch.getSession(TOMCAT_USER, TOMCAT_HOST, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
channelExec.setCommand("ps -ef | grep tomcat"); // 检查Tomcat进程
BufferedReader in = new BufferedReader(new InputStreamReader(channelExec.getInputStream()));
channelExec.connect();
String line;
while ((line = in.readLine()) != null) {
if (line.contains("catalina")) { // Tomcat进程名称
return true;
}
}
channelExec.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static void startTomcat() {
try {
ProcessBuilder processBuilder = new ProcessBuilder("sh", TOMCAT_START_SCRIPT);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Tomcat started successfully.");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
请注意替换your_remote_host
、your_ssh_user
、/path/to/your/private/key
和/path/to/your/tomcat/startup.sh
为实际的远程主机信息、SSH私钥路径和Tomcat启动脚本路径。