[問題] 關於觀察linux程序與2>&1的程序

作者: yuiweq1999 (imre2009)   2024-04-17 11:58:02
各位好,因為覺得自己爬文理解的不是很正確,加上參考前輩撰寫的內容後修改但
還是覺得怪怪的想請教:
我撰寫了一個方法
#/bin/bash
single_instance() {
# $0 是當前 shell script 名稱
local script_name=$(basename "$0")
local script_instance=$(ps -ef | grep "${script_name}" | grep -v grep |
grep -v "2>&1" | wc -l)
if [ ${script_instance} -gt 2 ]; then
warn " The "${script_name}" already running!"
# echo -e " The ${script_name} already running!"
exit 1
fi
}
這邊我先撰寫一個check_function.sh如上,主要用來檢查是否有有當前執行的程序名稱
,並且為了避免掉把grep自己的時候把自己算進去所以排除掉後用得到的值來判斷
因為我會由1個主要的Atest.sh執行後引用這個方法(source),再執行另一個Btest.sh
所以我的理解是Atest.sh對Btest.sh執行後(例如./Btest.sh),代表對Btest.sh開啟一個
cmd(排程1),而Btest.sh開始執行後會開啟自己的執行排程(排程2)
用來避免有第3個或以上的排程被執行
但我發現當我使用cronjob去呼叫我的Atest.sh時,因為我希望把log重導向到另一個檔案
,似乎就會被視為是第3個排程而觸發到檢查變成不執行
cronjob如下
*/1 * * * * cd /tmp && /tmp/Atest.sh >> /tmp/Atest.log 2>&1
我有試著echo $script_instance、還有直接把ps -ef那段直接執行出來看,但只會看到
2組對應我的script_name的值;後來發現必須要再增加| grep '2>&1' |才能夠避免重新
導向的這個動作被算進去,但不是很理解為什麼在ps -ef的時候卻沒辦法分辨得出來他也
被視作一個排程
希望有大神可以解惑,感謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com