1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Duvida Derrubar usuario LINUX

Discussão em 'EMS , HCM e Totvs 11' iniciado por eduardo loran, Abril 2, 2025.

  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Esse programa fica rodando no servidor linux, onde o banco está levantado.

    o programa windows vai se comunicar com o programa do linux via socket

    Então programa no linux vai pegar o nome do usuário, olhar na tabela oculta de cada banco conectado e pegar o ID e rodar o script de derrubar o banco via linha de comando no OS-COMMAND.

    Não tenho nenhum exemplo de programa socket, procure no google que deve haver exemplos.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Se não quiser gastar licença progress no servidor linux, esse programa pode ser feito em java ou dotnet e ele comunicará com cada banco via ODBC pra poder pegar o ID de conexão, ou nem isso, o programa windows pega a lista de ID e manda para o programa java/dotnet no linux que já executa a linha comando direto, sem precisar conectar nos bancos
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Aqui tem um exemplo em java de como fazer um servidor socket:

    Código:
    import java.io.*;
    import java.net.*;
    public class ServidorSocket {
        public static void main(String[] args) {
            int porta = 12345; // Porta do servidor
           
            try (ServerSocket servidor = new ServerSocket(porta)) {
                System.out.println("Servidor iniciado na porta " + porta);
               
                while (true) {
                    Socket cliente = servidor.accept(); // Aguarda conexão do cliente
                    System.out.println("Cliente conectado: " + cliente.getInetAddress().getHostAddress());
                   
                    // Criando threads para tratar múltiplas conexões
                    new Thread(new ClienteHandler(cliente)).start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    class ClienteHandler implements Runnable {
        private Socket cliente;
        public ClienteHandler(Socket cliente) {
            this.cliente = cliente;
        }
        @Override
        public void run() {
            try (
                BufferedReader entrada = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
                PrintWriter saida = new PrintWriter(cliente.getOutputStream(), true)
            ) {
                String mensagem;
                while ((mensagem = entrada.readLine()) != null) {
                    System.out.println("Recebido: " + mensagem);
                    saida.println("Eco: " + mensagem); // Envia resposta para o cliente
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    cliente.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    Última edição: Abril 4, 2025
  4. eduardo loran

    eduardo loran Membro Participativo

    Olá Rafael, entendi agora melhor o conceito.

    Vou dar uma pesquisada como realizar, muito obrigado pela ajuda!
    rafael.andrade curtiu isso.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Eu troquei o link do chatgpt pelo código que ele forneceu, pois pelo jeito não tava funcionando o link, confere alí
  6. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Eu criei um socket no proprio progress, mas como disse o Rafael, consome licença do banco, eu usei um exemplo que estava no Kbase da progress, criei uma tabela no banco especifico, salvo lá os ids que é pra baixar, dai do lado server rodo um scripts que executa um programa progress, que le o que está na tabela, monta uma linha de comando usando o proshut e executa, depois de executado ele apaga os registros da tabela.

    Nessa versão, quando pediam pra derrubar um usuario, eu fazia em duas etapas, depois quando começamos a mexer com Pass Oe, ai eu criei uma versão do programa do lado servidor pra ser executado pelo Pass Oe, agora no meu CLIENT, eu salvo os registros na tabela, e dou um comando pra que o Pass Oe execute.

    Por ultimo agora, o programa do lado server está recebendo por parametro os IDs pra baixar, dai o CLIENT só envia o ID do usuario em cada banco pra derrubar.

    mas no fundo e sempre um .p que recebe parametros, monta uma linha de comando para o linux usando proshut, e dai com o comando os-command ele derruba.
    Eu acho vantagem usar o proprio progress porque depois que dá o comando pra derrubar o usuario, as vezes o banco não entende, então eu verifico se derrubou mesmo, se não derrubou, repete o comando, só devolve um OK quando realmente o usuario não está mais lá.
    upload_2025-4-8_14-48-22.png

    Nessa tela eu marco quem quero derrubar e clico no botão pra executar.
    rafael.andrade curtiu isso.

Compartilhe esta Página