+ Responder ao Tópico



  1. #1

    Unhappy Erro ao executar comando usando o sudo

    Olá amigos.

    Estou tentando escrever um script em shell. A um tempo atrás eu expus uma dúvida de como executar um comando como root e delegar o comando para outro usuário.
    Com a ajuda no fórum, descobri que usando o sudo seria possível:

    sudo -u duca comando



    Neste caso, mesmo como root, eu executo um comando como se fosse o usuário duca.


    The -u (user) option causes sudo to run the specified command as a user other
    than root. To specify a uid instead of a user‐name, use #uid. Note that if the
    targetpw Defaults option is set (see sudoers(5)) it is not possible to run
    commands with a uid not listed in the password database.




    O script é pequeno:


    # cat /usr/local/scripts/rodaservidor.sh

    #!/bin/bash

    cd /home/postgres/workspace/bin
    . ./setenv.sh
    tnameserv -ORBInitialPort 30000 &
    ./andvari_inicia_servidor.sh



    O scritp setenv.sh, configura as variáveis de ambiente:


    # cat /home/postgres/workspace/bin/setenv.sh

    #!/bin/sh

    cd /home/postgres/workspace/ProjetoGenomeServidor/deploy/cliente
    for JAR in *.jar *.zip ; do

    export CLASSPATH=$CLASSPATH:/home/postgres/workspace/ProjetoGenomeServidor/deploy/cliente/$JAR
    done

    cd /home/postgres/workspace/ProjetoGenomeServidor/deploy/servidor
    for JAR in *.jar *.zip ; do


    export CLASSPATH=$CLASSPATH:/home/postgres/workspace/ProjetoGenomeServidor/deploy/servidor/$JAR

    done

    export CLASSPATH=$CLASSPATH:/home/postgres/workspace/ProjetoGenomeServidor/classes/cliente:/home/postgres/workspace/ProjetoGenomeServidor/classes/corba:/home/postgres/workspace/ProjetoGenomeServidor/classes/servidor

    export CLASSPATH=$CLASSPATH:/home/postgres/workspace/ProjetoGenomeServidor/
    cd /home/postgres/workspace/bin

    echo $CLASSPATH



    Contudo, estou preso numa coisa.
    Estou tentando executar o meu script durante o boot. E com o sudo executá-lo como se fosse disparado pelo usuário postgres. Aparece a seguinte mensagem de erro:


    /usr/local/scripts/rodaservidor.sh: line 5: tnameserv: command not found
    ./andvari_inicia_servidor.sh: line 2: java: command not found



    [info]Se eu executo o script com o usuário postgres, funciona normal.[info]

    Ao digitar os comandos tnameserv e java no prompt, estão funcionam normal.

    Não sei o que fazer e peço encarecidamente sugestões.

    Ab, Duca.

  2. #2

    Padrão

    cara, tenta colocar o caminho completo dos comandos tnameserv e java. Ou põe no script um whitch e vê onde ele acha (se é que ele acha) esses comandos.

    Em qual runlevel ta rodando o script??

  3. #3

    Padrão

    Amigo, o seu problema é o path dos arquivos, o que você pode fazer é:

    1. Setar no /etc/profile a variavel path incluindo o caminho completo de onde estão esses executáveis, exemplo (necessita reiniciar ou re-ler o arquivo: source /etc/profile):
    export PATH=$PATH:/diretorio/diretorio

    2. Colocar o caminho completo para a execução desses executáveis, você pode saber isso através do comando "whereis java", exemplo:
    [root@av-servidor ~]# whereis ls
    ls: /bin/ls /usr/share/man/man1/ls.1.gz

    Sds,