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 pidofwhich 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

システムのフルパスを再確認してください。

関連情報