Shell-Script

Bash 腳本 - case esac - 失敗

  • April 17, 2019

下面的腳本對嗎???直到昨天都還好!

我編寫了以下腳本來幫助每分鐘執行一個 cron 作業並呼叫其他一些腳本,這可能會導致命令執行多次,預期的行為是有 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)".

太奇怪了,因為 pidofffmpeg | wc -w會顯示 23,但是腳本並沒有殺死所有並重新啟動它們!


我也嘗試過使用([0-3])而不是0)@jordanm 所說的,但沒有幫助。

這可能是因為您的 cron 或您用於工作的其他東西無法執行您使用過的所有命令。要解決此問題,我建議您使用任何命令的絕對路徑 - 使用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

仔細檢查系統中的完整路徑。

引用自:https://unix.stackexchange.com/questions/355541