Как использовать статические методы для управления сервисом с Procrun
Я пишу службу SFTP, используя Apache SSHD. Сервер будет установлен в Windows с использованием команды Apache commons daemon procrun. Я хотел бы обрабатывать запуск / остановку службы, используя статические методы start() и stop(), аналогично тому, как это делает Tomcat. Однако я не понимаю, как это работает. Я думаю, что мое замешательство приходит из-за понимания, как procrun запускает и останавливает службу. Насколько я понимаю, procrun запускает новый процесс Java с аргументами "start"/"stop"? Как новый экземпляр Java-программы может управлять элементом, который уже запущен?
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.SshServer;
import org.apache.sshd.server.config.keys.AuthorizedKeysAuthenticator;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SftpServer {
private static final Logger logger = LogManager.getLogger(SftpServer.class);
public static void main(String[] args){
if (args.length == 1) {
if (args[0] == "start") {
try{
start();
} catch (IOException e) {
logger.error(e);
}
} else if (args[0] == "stop") {
stop();
} else {
System.err.println("Unkown command. Use start/stop to conrol the service.");
}
} else {
System.err.println("Use start/stop to control the service.");
}
}
public static void start() throws IOException {
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPublickeyAuthenticator(new AuthorizedKeysAuthenticator(new File("conf/users.keys")));
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File("conf/hostkey.ser")));
sshd.setPort(22);
List<NamedFactory<Command>> subSystemFactories = new ArrayList<>();
subSystemFactories.add(new SftpSubsystemFactory());
sshd.setSubsystemFactories(subSystemFactories);
sshd.start();
while(true){
}
}
public static void stop(){
// What to do here?
}
}