mininumau!
Esse codigo abaixo é a Morticia,
um programa que uso para repitir comandos com parametros diferentes tipo um rsh ex:
tenho que executar uma mesma operacao em 7 maquinas, simples o que eu faço é criar um arquivos com os hostnames das maquinas ex:
-----------------
salacom7maquinas.hosts
-----------------
murderdoll
littledoll
casualtie
jumpstarserversp
sunray-server-01
sunray-server-07
punkgirl
------------------
e em seguida executar o comando apropriado e um parametro em segui ex:
java Morticia rsh salacom7maquinas.hosts "ls /export/home"
-------------------------------
COMANDO: rsh
SUB-COMANDO: murderdoll
PARAMETRO: ls /export/home
SAIDA DO COMANDO
info_cursos
info_cursos.tar.gz
lost+found
student
-------------------------------
-------------------------------
COMANDO: rsh
SUB-COMANDO: punkgirl
PARAMETRO: ls /export/home
SAIDA DO COMANDO
info_cursos
sexpics.zip
lost+found
student
-------------------------------
-------------------------------
COMANDO: rsh
SUB-COMANDO: sunray-server-01
PARAMETRO: ls /export/home
SAIDA DO COMANDO
info_cursos
Dimmu_Borgir-Kings-Of-Carnival-Creation.mp3
lost+found
student
-------------------------------
......
da para notar que a saida do comando não está seguindo a ordem da lista pois
ele é muilti thread e fica impossivel saber na pratica qual maquina vai responder primeiro tambem por diversos fatores e alem disso dsaber qual thread chegou primeiro,
outro exemplo:
java Morticia grep salacom7maquinas.hosts /etc/hosts
-------------------------------
COMANDO: grep
SUB-COMANDO: punkgirl
PARAMETRO: /etc/hosts
SAIDA DO COMANDO
192.168.200.104 punkgirl
-------------------------------
-------------------------------
COMANDO: grep
SUB-COMANDO: murderdoll
PARAMETRO: /etc/hosts
SAIDA DO COMANDO
192.168.200.104 murderdoll
-------------------------------
-------------------------------
COMANDO: grep
SUB-COMANDO: casualtie
PARAMETRO: /etc/hosts
SAIDA DO COMANDO
192.168.200.104 casualtie
-------------------------------
......
nossas amigas murderll e punkgirl estão sempre aparecendo,
está abaixo o codigo do programa, fiz apenas em uma classe pois estava com presa no que tinha que fazer,
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Morticia implements Runnable
{
private String comando;
private String subComando;
private String parametro;
private String arquivo;
public void setComando(String comando)
{
this.comando=comando;
}
public void setSubComando(String subComando)
{
this.subComando=subComando;
}
public void setParametro(String parametro)
{
this.parametro=parametro;
}
public void setArquivo(String arquivo)
{
this.arquivo=arquivo;
}
public String getComando()
{
return comando;
}
public String getSubComando()
{
return subComando;
}
public String getParametro()
{
return parametro;
}
public String getArquivo()
{
return arquivo;
}
public void exec() throws IOException
{
Process process = Runtime.getRuntime().exec(getComando()+" "+getSubComando()+" "+getParametro());
BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getInputStream()));
String entrada = buffer.readLine();
String saida="";
while((entrada)!=null)
{
saida+=entrada +"\n";
entrada=buffer.readLine();
}
String corpo = "-------------------------------\n";
corpo+="COMANDO: "+getComando()+"\n";
corpo+="SUB-COMANDO: "+getSubComando()+"\n";
corpo+="PARAMETRO: "+getParametro()+"\n";
corpo+="SAIDA DO COMANDO\n";
corpo+=saida;
corpo+="\n-------------------------------";
System.out.println(corpo);
}
public int numeroLinhas() throws IOException
{
BufferedReader bufferFile = new BufferedReader(new FileReader(getArquivo()));
int cont=0;
String linha = bufferFile.readLine();
while(linha!=null)
{
linha = bufferFile.readLine();
cont++;
}
return(cont);
}
public String getLinha(int numLinha) throws IOException
{
BufferedReader bufferFile = new BufferedReader(new FileReader(getArquivo()));
int maxLinesFile = (numeroLinhas()-1); //o caso do -1 ja foi comentado a cima
int cont=0;
String linha = bufferFile.readLine();
if(numLinha>maxLinesFile) throw new IOException("Linha invalida");
while(linha!=null)
{
linha = bufferFile.readLine();
if(numLinha==cont) break;
cont++;
}
return(linha);
}
public void start() throws Exception
{
//os contadores do programa iniciam em 0 por isso decremento 1 do total de linhas
int numObjects = (numeroLinhas()-1);
System.out.println("Morticia.Iniciando-Array-de-Objetos");
Morticia morticia[] = new Morticia[numObjects];
System.out.println("Morticia.Iniciando-Array-de-Threads");
Thread thread[] = new Thread[numObjects];
System.out.println("Morticia.setando Objectos");
for(int i=0; i < numObjects; i++)
{
morticia[i] = new Morticia();
morticia[i].setComando(getComando());
morticia[i].setSubComando(getLinha(i));
morticia[i].setParametro(getParametro());
morticia[i].setArquivo(getArquivo());
thread[i] = new Thread(morticia[i]);
}
System.out.println("Morticia.Iniciando Threads");
for(int i=0; i< numObjects; i++)
{
thread[i].start();
}
}
public void run()
{
try
{
exec();
}
catch(Exception e)
{
System.out.println("ThreadErro: "+e.getMessage());
}
}
public static void main(String[] args)
{
if(args.length>=3)
{
Morticia morticia = new Morticia();
try
{
System.out.println("Iniciando Morticia 1.0");
morticia.setComando(args[0]);
morticia.setArquivo(args[1]);
morticia.setParametro(args[2]);
/*System.out.println(morticia.getLinha(0));
System.out.println(morticia.getLinha(1));
System.out.println(morticia.getLinha(2));
System.out.println(morticia.getLinha(5));*/
morticia.start();
}
catch(Exception e)
{
System.out.println("ERRO: "+e.getMessage());
}
}
else
{
System.out.println("Use: java Morticia ");
}
}
}
Falow !!
AS.
Today's Page Hits: 2