De onde meu script foi iniciado na reinicialização

2

Antes de alguns dias eu escrevi um script e coloquei em algum lugar para iniciá-lo automaticamente na inicialização da minha framboesa com chiado.

ps -ax me dá:

 2041 ?        S      0:00 /usr/sbin/apache2 -k start
 2064 ?        Ss     0:00 /usr/sbin/cron
 2067 ?        S      0:00 /USR/SBIN/CRON
 2068 ?        S      0:00 /USR/SBIN/CRON
 2072 ?        Ss     0:00 /bin/sh -c eibd -t 1023 -S -D -R -T -i --no-tunnel-cl...
 2073 ?        Ss     0:00 /bin/sh -c python2.7 /opt/scripts/nibe_uplink/main.py
 2074 ?        S      0:00 eibd -t 1023 -S -D -R -T -i --no-tunnel-client-queuin...
 2075 ?        Rl     1:25 python2.7 /opt/scripts/nibe_uplink/main.py
O

pid 2074 é iniciado a partir de /etc/crontab . pid 2075 é iniciado a partir de crontab -e

Como posso encontrar onde o pid 2073 é iniciado?

    
por Tobias M. 04.10.2018 / 10:33

2 respostas

4

O que começou este processo?

Você pode usar ps para encontrar o pai de cada processo, adicionando -l ( ps -axl ) para fornecer uma saída "longa" ou solicitando especificamente o ppid :

ps -o ppid 2074
 PPID
2072

Repita para 2072 para ver o que começou isso (provavelmente o CRON).

Por que dois processos?

o cron passa cada comando para um shell. De crontab (5) :

The entire command portion of the line, up to a newline or a "%" character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile.

Se você tiver a seguinte linha em crontab :

0 * * * * python2.7 /opt/some/script.py

... então quando a entrada precisa ser executada (a cada hora, na hora), o cron executa o shell ( /bin/sh ) com os dois argumentos -c e python2.7 /opt/some/script.py .

O shell interpreta tudo o item depois de '-c' como um comando para executar. Ele encontra python2.7 de PATH e o executa com o único argumento /opt/some/script.py . Então, dependendo do seu shell (incluindo para qual /bin/sh aponta), agora podem haver dois processos em execução:

  • /bin/sh -c python2.7 /opt/some/script.py
  • /usr/bin/python2.7 /opt/some/script.py

É por isso que ps está mostrando 2 eibd process e 2 python2.7 , apesar de haver apenas uma entrada para cada em seu crontab .

Algumas camadas podem evitar um segundo processo como este. Veja Por que não há clone ou fork aparente no comando bash simples e como é feito?

    
por 04.10.2018 / 11:21
0

Lendo este link diz-me que existem várias maneiras de executar scripts na inicialização para o pi framboesa. Em resumo, eles são:

  1. rc.local
  2. .bashrc
  3. diretório init.d
  4. SYSTEMD
  5. crontab

Veja como você já verificou o cron tente ver 1-4.

    
por 04.10.2018 / 10:56