Am un script watchdog care rulează aplicații listate într-un fișier. Vreau să pot rula aplicațiile așa cum sunt introduse în acel fișier. În prezent, doar fac bucla prin fișier și le rulez în fundal dacă nu există niciun pid asociat cu acele aplicații, pur și simplu rulez aplicația cu (list_Entry &) pentru a permite toate argumentele pe care le-ar putea avea aplicația și redirecționările I/O intacte. În timp ce argumentele funcționează corect, nu funcționează pentru listEntry care arată ca „my_app >> /tmp/mylog.txt 2>&1”, argumentul de redirecționare nu creează un /tmp/mylog, în schimb stdout este direcționat către scriptul meu . Cum pot preveni acest lucru să se întâmple?
în timp ce adevărat
do
test /mnt/appsList && {
input="/mnt/appsList"
în timp ce IFS= citește linia -r
do
dacă echo $linie | grep -q "^[a-z/(]"; apoi
app_base=$(nume de bază `echo "$line"|cut -f1 -d ' '|tr -d [:space:]`)
#echo „testarea stării rulării pentru $app_base”
pid_app=$(pgrep -f $app_base)
# echo "`date`: pid-ul $app_base este $pid_app" | tee -a $_SYS_LOG_DIR/system_log
dacă [ -z "$pid_app" ];atunci
echo „`date` : rulează $line” | tee -a $_SYS_LOG_DIR/system_log
($line) &
dormi 10
fi
fi
terminat < "$input"
}
somn 5
Terminat
Mulțumiri
Ratin