Shell-Script
Bash 腳本 - case esac - 失敗
下面的腳本對嗎???直到昨天都還好!
我編寫了以下腳本來幫助每分鐘執行一個 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)"
.太奇怪了,因為 pidof
ffmpeg | 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
仔細檢查系統中的完整路徑。