이 과정은 어떻게 시작되었나요?

이 과정은 어떻게 시작되었나요?

며칠 전에 저는 스크립트를 작성하여 Raspberry Pi에서 부팅 시 자동으로 시작되도록 어딘가에 두었습니다.

ps -ax나에게주세요:

 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

pid 2074는 처음부터입니다 /etc/crontab. pid 2075로 시작됨crontab -e

pid 2073이 시작되는 위치를 찾는 방법은 무엇입니까?

답변1

이 과정은 어떻게 시작되었나요?

()를 추가하여 "긴" 출력을 제공하거나 ps다음을 구체적으로 요청하여 각 프로세스의 상위 프로세스를 찾을 수 있습니다.-lps -axlppid

ps -o ppid 2074
 PPID
2072

2072년에 반복하여 시작된 내용(아마도 CRON)을 확인하세요.

왜 프로세스가 두 개인가요?

cron은 각 명령을 쉘에 전달합니다. ~에서예약된 작업(5):

줄의 전체 명령 부분(개행 또는 "%" 문자까지)은 SHELL 변수 /bin/sh 또는 cronfile에 지정된 셸에 의해 실행됩니다.

다음 줄이 있는 경우 crontab:

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

...그런 다음 항목을 실행해야 할 때(매시간, 매시간) cron은 /bin/sh두 개의 인수를 사용하여 -c쉘( )을 실행합니다 python2.7 /opt/some/script.py.

그러면 쉘은 "-c" 이후의 모든 것을 실행할 명령으로 해석합니다. 단일 인수를 사용하여 python2.7from을 찾고 실행합니다 . 따라서 셸( 지정한 항목 포함)에 따라 현재 두 개의 프로세스가 실행 중일 수 있습니다.PATH/opt/some/script.py/bin/sh

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

그렇기 때문에 2개의 프로세스와 2개의 프로세스가 ps표시되지만 .eibdpython2.7crontab

일부 쉘은 이와 같은 두 번째 프로세스를 포크하는 것을 피할 수 있습니다. 바라보다간단한 bash 명령에 명백한 복제나 분기가 없는 이유는 무엇이며 어떻게 수행됩니까?

답변2

읽다이 링크Raspberry Pi가 부팅될 때 스크립트를 실행하는 여러 가지 방법이 있다고 말해 주세요. 요약하면 다음과 같습니다.

  1. 로컬 파일
  2. .bashrc
  3. init.d 디렉토리
  4. 시스템 D
  5. 예약 된 일들

이제 cron을 확인했으므로 1-4를 살펴보세요.

관련 정보