아래 스크립트가 맞나요? ? ? 어제까지는 모든 것이 괜찮았습니다!
cron 작업이 1분마다 실행되도록 돕고 다른 스크립트를 호출하기 위해 다음 스크립트를 작성했습니다. 이로 인해 명령이 여러 번 실행될 수 있으며 예상되는 동작은 4개의 작업 프로세스를 갖는 것이며 그보다 적거나 그 이상이면 재부팅이 발생합니다. , 다음 스크립트가 올바른지 알려주세요.
#! /bin/bash
case "$(pidof command | wc -w)" in
0) echo "Restarting command: $(date)" >> log
/usr/bin/sh x.sh
;;
4) # all ok
echo "All OK" >> log
;;
*) for pid in $(ps -ef | grep "x" | grep "y" | awk '{print $2}'); do kill -9 $pid; done
echo "Removed PIDs and RESTARTING FFMPEG: $(date)" >> /root/afarinEidSTs/log
/usr/bin/sh x.sh
;;
esac
프로세스가 4개 이상 있어도 프로세스가 종료되지 않습니다. 이유는 무엇입니까?
로그 파일에는 "Restarting command: $(date)"
.
pidof가 23을 표시하기 때문에 이것은 이상 ffmpeg | wc -w
하지만 스크립트는 그것들을 모두 죽이고 다시 시작하지 않습니다!
([0-3])
@jordanm이 말한 것처럼 대신 사용해 보았지만 0)
도움이 되지 않았습니다.
답변1
이는 작업을 완료하는 데 사용하는 크론이나 기타 항목이 사용한 모든 명령을 실행할 수 없기 때문일 수 있습니다. 이 문제를 해결하려면 which pidof
, which grep
&c 를 사용하여 얻은 모든 명령의 절대 경로를 사용하는 것이 좋습니다 .
#!/bin/bash
case "$(/usr/sbin/pidof command | /usr/sbin/wc -w)" in
0) echo "Restarting command: $(date)" >> log
/usr/bin/sh x.sh
;;
4) # all ok
echo "All OK" >> log
;;
*) for pid in $(/usr/sbin/ps -ef | /usr/sbin/grep "x" | /usr/sbin/grep "y" | /usr/sbin/awk '{print $2}'); do kill -9 $pid; done
echo "Removed PIDs and RESTARTING FFMPEG: $(date)" >> /root/afarinEidSTs/log
/usr/bin/sh x.sh
;;
esac
시스템의 전체 경로를 다시 확인하세요.