Andy
Andy

Reputation: 6329

How to read the processes running on another machine with java

I have a list of IPs in a json file . My java application should do the following.

  1. Read IPs from the JSON file. [this has been taken care of]
  2. Should check if the machines mentioned in the JSON file are up and running.
  3. If the machine is up, my application should read the processes that are running in that computer.

Other information:

  1. My java application would run on a Linux OS
  2. The machines mentioned in the JSON file are also on Linux
  3. My application is a standalone java application.

Can you please suggest the options I have to perform this task?

Upvotes: 2

Views: 779

Answers (3)

Solorad
Solorad

Reputation: 914

  1. For parsing json there are pretty much different json formatters. As like gson, Jackson, boon.
  2. On your computer ping command may not exist. So, more accurate way to check availability is to use ()

    InetAddress address = InetAddress.getByName("127.0.0.1");
    boolean reachable = address.isReachable(10000);
    

    But there might be issues. So, if you doesn't fear platform dependency, you can use UNIX ping command as follow:

    Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
    int returnVal = p1.waitFor();
    boolean reachable = (returnVal==0);
    
  3. For 3rd step you could use JSch

Upvotes: 1

Jos
Jos

Reputation: 2013

One option is to install/enable SSH Servers in the remote machines, then

  1. Read IPs from JSON
  2. do something like a ping to each IP to check if its up. In java, you could use something like InetAddress#isReachable() for this.
  3. connect to the IP using SSH and issue linux commands like ps etc to get the list of running processes in the machine. In java you could use any of the available SSH libraries. Eg: jsch

You can even skip the step 2 and straight away try the SSH connection, and determine if host is up that way.. but pinging will be more reliable (but make sure no firewall settings block the remote machines from responding to pings).

Update

Instead of InetAddress#isReachable(), you can use Runtimes's exec command to run a native ping command. check this

Upvotes: 4

Retardust
Retardust

Reputation: 294

You could try to use Zabbix or some light weight analog with JMX

Upvotes: 1

Related Questions