Running Watcher na inicialização

1

Eu preciso monitorar as alterações em uma pasta e em suas subpastas e estou usando o Watcher para essa finalidade. Sem problemas até agora. No entanto, quero que o daemon do Watcher seja executado na reinicialização. Para staters eu tentei o seguinte.

/etc/init.d

Eu criei o seguinte script simples aqui

#! /bin/bash
watcher.py start

com watcher.py localizado na pasta /usr/local/bin . Eu então criei um link simbólico da /etc/rc2.d pasta ln -s /etc/init.d/watcher /etc/rc2.d/S99watcher e reiniciei.

A verificação de watcher.py status informou que não estava sendo executada. Então modifiquei meu script init.d da seguinte forma

#! /bin/bash
/usr/bin/python /usr/local/bin/watcher.py start

e reiniciado. Desta vez, watcher.py status relatou corretamente que o Observador está sendo executado.

O problema imediato pode ser resolvido, mas eu ainda não entendo o porquê. Por que é que, a partir de um prompt de shell interativo, posso simplesmente digitar watcher.py start para que o daemon do Watcher seja iniciado, enquanto na inicialização eu preciso dizer explicitamente ao Python para executar esse script?

Eu geralmente recebo meu shell & amp; scripts de inicialização trabalhando por força de não desistir, em vez de qualquer conhecimento profundo de como essas coisas funcionam. Espero que alguém aqui seja capaz de fornecer uma visão mais bem informada.

    
por DroidOS 16.12.2015 / 15:31

1 resposta

1

Quando o $ PATH está definido?

Sobre /etc/profile :

Como podemos ler aqui :

  

... O arquivo /etc/profile não é muito diferente, mas é usado para   defina variáveis ambientais do sistema em shells de usuários. As variáveis   às vezes são os mesmos que estão no .bash_profile , no entanto   este arquivo é usado para definir um PATH ou PS1 inicial para todos os usuários do shell de   o sistema.

e:

  

Além da configuração de itens ambientais, o /etc/profile será   execute os scripts em /etc/profile.d/*.sh

O que significa que $PATH (para todos os usuários) é realmente definido por scripts em /etc/profile.d , como também podemos concluir aqui .

Olhando para o meu sistema, nem tudo é exatamente como descrito aqui , mas o a informação é confirmada no entanto.

Uma pesquisa rápida (textual) em /etc na string: /usr/local/bin , da qual eu sei que está no meu (global) $PATH , produz o arquivo /etc/environment , que contém a linha:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Estes são exatamente os diretórios no meu $PATH (além dos locais).

A linha inferior é que $PATH não está definido antes os scripts em /etc/init.d são executados, mas na verdade definidos por scripts em etc/init.d

O que fazer?

A resposta aqui sugere definir o $PATH variável no topo do script. Olhando (de novo) no meu sistema, isso é exatamente o que foi feito com, e. meu script /etc/init.d/saned :

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Usar caminhos absolutos como você também funcionará.

    
por Jacob Vlijm 17.12.2015 / 08:49