ターミナルで^ cを押すまで、シェルのフォアグラウンドで実行される2つのコマンドを実行するプログラムを作成しました。Executorサービスは最初のタスクのみを実行します
それぞれシェルコマンド
./weed master -mdir=/var/lib/qualebs/weed
次のように上記のコマンドの出力は
[email protected]:~$ cd weed_0.64_linux_386/
[email protected]:~/weed_0.64_linux_386$ ./weed master -mdir=/var/lib/qualebs/weed -port=9333
I0518 00:40:16 24540 file_util.go:19] Folder /var/lib/qualebs/weed Permission: -rwxr-xr-x
I0518 00:40:16 24540 topology.go:84] Using default configurations.
I0518 00:40:16 24540 master_server.go:56] Volume Size Limit is 30000 MB
I0518 00:40:16 24540 master.go:66] Start Seaweed Master 0.64 at :9333
I0518 00:40:16 24540 raft_server.go:97] Recovered from log
I0518 00:40:22 24540 master_server.go:82] [ localhost:9333 ] localhost:9333 becomes leader.
次いでIコマンドと出力とボリュームサーバを起動さ
[email protected]:~$ cd weed_0.64_linux_386/
[email protected]:~/weed_0.64_linux_386$ ./weed volume -dir=/var/lib/qualebs/weed -port=9444
I0518 00:42:18 24583 file_util.go:19] Folder /var/lib/qualebs/weed Permission: -rwxr-xr-x
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/1.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/1.dat, replicaPlacement=000 v=2 size=2021448 ttl=
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/2.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/2.dat, replicaPlacement=000 v=2 size=728808 ttl=
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/3.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/3.dat, replicaPlacement=000 v=2 size=1215160 ttl=
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/4.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/4.dat, replicaPlacement=000 v=2 size=1272992 ttl=
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/5.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/5.dat, replicaPlacement=000 v=2 size=404944 ttl=
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/6.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/6.dat, replicaPlacement=000 v=2 size=834640 ttl=
I0518 00:42:18 24583 volume.go:103] loading file /var/lib/qualebs/weed/7.idx readonly false
I0518 00:42:18 24583 store.go:212] data file /var/lib/qualebs/weed/7.dat, replicaPlacement=000 v=2 size=588240 ttl=
I0518 00:42:18 24583 store.go:219] Store started on dir: /var/lib/qualebs/weed with 7 volumes max 7
I0518 00:42:18 24583 volume.go:90] Start Seaweed volume server 0.64 at 0.0.0.0:9444
Javaコードを自動的にマスターとボリュームサーバーを起動する
public class ContextListener implements ServletContextListener {
private final ExecutorService executor = Executors.newFixedThreadPool(2);
@Override
public void contextInitialized(ServletContextEvent sce) {
final ServletContext servletContext = sce.getServletContext();
executor.execute(new WeedMaster());
executor.execute(new WeedVolume());
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
executor.shutdown();
try {
executor.awaitTermination(0, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
Logger.getLogger(ContextListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
private class WeedMaster implements Runnable {
@Override
public void run() {
try {
List<String> command = new ArrayList<>();
command.add("./weed");
command.add("master");
command.add("-mdir=/var/lib/qualebs/weed");
command.add("port=9333");
ProcessBuilder pb = new ProcessBuilder(command);
pb.directory(new File("/home/qualebs/weed_0.64_linux_386/"));
Process start = pb.start();
start.waitFor();
} catch (IOException | InterruptedException ex) {
Logger.getLogger(ContextListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private class WeedVolume implements Runnable {
@Override
public void run() {
try {
List<String> command = new ArrayList<>();
command.add("./weed");
command.add("volume");
command.add("-dir=/var/lib/qualebs/weed");
command.add("port=9444");
ProcessBuilder pb = new ProcessBuilder(command);
pb.directory(new File("/home/qualebs/weed_0.64_linux_386/"));
Process start = pb.start();
start.waitFor();
} catch (IOException | InterruptedException ex) {
Logger.getLogger(ContextListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
次に、アプリケーションをサーバーにデプロイすると、最初のコマンドが実行され、マスターサーバーが実行されていてボリュームサーバーは実行されていないことがわかります。なぜ2番目のタスクは実行されませんか?
両方のコマンドを端末から実行されたとき、私は主人とボリュームの両方が
[email protected]:~$ sudo ps auwx | grep weed
[sudo] password for qualebs:
qualebs 24540 0.0 0.1 798100 7008 pts/1 Sl+ 00:40 0:00 ./weed master -mdir=/var/lib/qualebs/weed -port=9333
qualebs 24583 0.0 0.1 798100 9124 pts/6 Sl+ 00:42 0:00 ./weed volume -dir=/var/lib/qualebs/weed -port=9444
qualebs 24749 0.0 0.0 22516 1020 pts/18 S+ 00:48 0:00 grep --color=auto weed
を実行している見ることができますが、プロセスビルダーから実行したとき、私は唯一のポート9333
は、両方のタスクが全く走ったそのうちの一つが何らかの理由 – Antoniossss
のため終了didntの場合、私は私の '」(command.addポートに間違いを見ている場合は'を参照して)各 'start.waitFor(後にログを追加します。 = 9333 ");ポートの前に' '私は忘れました。 'command.add(" - port = 9333 ");'に変更され、すべて正常に機能しました。私は誤ったアラームのためにとても残念です。 – qualebs