며칠 전에 저는 스크립트를 작성하여 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
다음을 구체적으로 요청하여 각 프로세스의 상위 프로세스를 찾을 수 있습니다.-l
ps -axl
ppid
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.7
from을 찾고 실행합니다 . 따라서 셸( 지정한 항목 포함)에 따라 현재 두 개의 프로세스가 실행 중일 수 있습니다.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
표시되지만 .eibd
python2.7
crontab
일부 쉘은 이와 같은 두 번째 프로세스를 포크하는 것을 피할 수 있습니다. 바라보다간단한 bash 명령에 명백한 복제나 분기가 없는 이유는 무엇이며 어떻게 수행됩니까?
답변2
읽다이 링크Raspberry Pi가 부팅될 때 스크립트를 실행하는 여러 가지 방법이 있다고 말해 주세요. 요약하면 다음과 같습니다.
- 로컬 파일
- .bashrc
- init.d 디렉토리
- 시스템 D
- 예약 된 일들
이제 cron을 확인했으므로 1-4를 살펴보세요.