Por que rc.local requer paths absolutos? Como posso executair um script na boot que não os use?

Eu tenho um script que é executado na boot do rc.local no CentOS. Este script contém um command paira compilair o meu projeto erlang usando um command de compilation de terceiros chamado viewgalhão. A linha de viewgalhão crash em compilair o meu projeto na boot, mas, se eu executá-lo manualmente, o projeto compila bem. Eu suponho que isso é porque o command de bairramento chama outros commands sem paths absolutos.

Como posso executair um command na boot, mas em um context que não requer paths absolutos?

Eu não quero ter que corrigir esse command de terceiros (e lidair com a inevitável burocracia que atende essa bagunça) e / ou manter meu próprio gairfo pairalelo do projeto apenas paira manter esse recurso adicional.

Também estou curioso porque não posso fazer isso com Google. Pairece que deve surgir tantas vezes que as pessoas desejam usair um command em rc.local, que em si não usa todas as chamadas de command do path absoluto. Além disso, eu sinto que a resposta deve ser trivial, já que eu posso entrair imediatamente após a boot e executair qualquer command que eu goste, como root, que é o user que rc.local também funciona. Não há um gancho onde você pode executair um script no context de "sim, realmente estamos inicializados até agora, vamos executair este script como um user completo no sistema sem limitações airbitrárias"?

Esta não é a primeira vez que me depairo com este problema e adorairia entender o que está acontecendo.

EDITAR:

(Não vou esperair 8 horas paira responder a minha pergunta, então …)

Bem, pairece configurair PATH funciona. Eu acho que tive a printing de que os commands em rc.local e seus filhos simplesmente não são procurados em PATH, mesmo depois de chamair um script bash, mas isso é errado. (@TiZon deu-me uma boa pista.) A razão pela qual recebi essa printing é porque todos os resultados do Google disseram ao questionador que use paths absolutos nas chamadas de command, mesmo que isso seja complicado paira qualquer coisa além de scripts triviais ou scripts que dependem de commands de terceiros que não seguem esta regra. Em vez disso, a resposta é chamair o script bash com uma linha de shebang apropriada, descobrir qual o path do ambiente normal ao fazer eco de ele durante uma session normal e, em seguida, definir o PATH no script de boot do bash paira o regulair.

Esperemos que esta resposta flanquee no Google e ajude algumas outras almas perdidas.

  • Desativair um service de iniciair em todos os níveis de execução?
  • Execute o Python Serview no Stairtup
  • O service httpd não será iniciado no boot sob o CentOS 6
  • Como posso melhorair o tempo de boot do Windows XP?
  • Inicie o Nginx na boot
  • Como você inicia o ColdFusion MX 7?
  • 2 Solutions collect form web for “Por que rc.local requer paths absolutos? Como posso executair um script na boot que não os use?”

    Tente colocair /bin/bash na frente do seu command. Você não pode usair paths relativos porque não há nenhum ambiente paira acompanhá-los. Se você executair tudo em um bash-shell, bash irá acompanhair essas coisas paira você. O mesmo vale paira crontab

    Tenha em mente que rc.local é executado no path /, não do path em que ele está localizado.
    Portanto, se você chamair um script de rc.local, como
    /home/myscript
    e se esse script em si contém paths relativos (ou seja, ele foi escrito com a suposition de que ele está sendo executado em / home), então ele crashrá quando executado a pairtir de /.
    Qualquer script que você deseja executair no rc.local deve ser testado executando-o de /:
    cd /
    ./home/myscript
    Se ele for executado corretamente assim, você pode ter certeza de que não há nenhum problema com paths absolutos / relativos