main_start_script
백그라운드에서 2개의 Python 프로그램을 실행하는 매우 간단한 스크립트를 만들었습니다 . 코드는 다음과 같습니다.
python /opt/cuckoo/cuckoo-2/cuckoo.py 1>cuckoo_script/cuckoo_start.txt 2>&1 &
python /opt/cuckoo/cuckoo-2/utils/web.py 1>cuckoo_script/web_start.txt 2>&1 &
이제 이 두 프로그램이 실행 중인지 확인하는 방법과 그렇지 않은 경우 스크립트를 실행하여 시작하는 방법을 알고 싶습니다.
사람들이 확인을 위해 "Puppet"을 사용하는 것이 좋다고 들었지만 지금까지 유용한 튜토리얼을 찾지 못했습니다.
답변1
이것 좀 봐비슷한 계산기 질문. 이 pgrep
명령은 실행 중인 프로세스가 존재하는지 확인할 수 있습니다.
이 명령은 pgrep -f <file>
지정된 파일의 현재 인스턴스 수를 반환합니다. 예를 들어:
[user@localhost ~]$ pgrep -f /sbin/init
1
[user@localhost ~]$
파일이 프로세스와 연결되어 있지 않으면 아무것도 반환하지 않습니다.
아직 실행되고 있지 않은 경우 이를 실행하는 bash 스크립트에 통합할 수 있습니다.
#!/bin/bash
if [[ ! $(pgrep -f script.sh) ]]; then
script.sh
fi
답변2
bash의 특수 쉘 var '$!'를 사용하여 각 명령의 PID 번호를 저장하십시오. 이는 마지막 명령의 프로세스 pid입니다. 그런 다음 명령을 다시 실행하기 전에 "/proc/PID"가 있는지 확인하십시오.
#!/bin/bash
do_cuckoo() {
python /opt/cuckoo/cuckoo-2/cuckoo.py 1>cuckoo_script/cuckoo_start.txt 2>&1 & echo $! >/tmp/cuckoo.pid
}
do_web() {
python /opt/cuckoo/cuckoo-2/utils/web.py 1>cuckoo_script/web_start.txt 2>&1 & echo $! >/tmp/web.pid
}
do_cuckoo && do_web # First time run
# You should add a proper sleep timer below.
while :; do
[ ! -d /proc/$(</tmp/cuckoo.pid) ] && do_cuckoo
[ ! -d /proc/$(</tmp/web.pid) ] && do_web
done
어쩌면 while 루프 대신 "until"을 사용하는 것이 더 나을 수도 있습니다. 그 일은 당신에게 맡기겠습니다 ;)