Bash 스크립트 - 사례 esac - 실패

Bash 스크립트 - 사례 esac - 실패

아래 스크립트가 맞나요? ? ? 어제까지는 모든 것이 괜찮았습니다!

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

시스템의 전체 경로를 다시 확인하세요.

관련 정보