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

看板Programming作者 (imre2009)時間7月前 (2024/04/17 11:58), 編輯推噓1(102)
留言3則, 3人參與, 6月前最新討論串1/1
各位好,因為覺得自己爬文理解的不是很正確,加上參考前輩撰寫的內容後修改但 還是覺得怪怪的想請教: 我撰寫了一個方法 #/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的時候卻沒辦法分辨得出來他也 被視作一個排程 希望有大神可以解惑,感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.213.108 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1713326284.A.3DF.html

04/18 09:31, 7月前 , 1F
為什麼不用lock file呢?
04/18 09:31, 1F

04/19 10:06, 7月前 , 2F
lock file +1
04/19 10:06, 2F

05/07 10:04, 6月前 , 3F
好的,我來研究看看,感謝!
05/07 10:04, 3F
文章代碼(AID): #1c7qZCFV (Programming)
文章代碼(AID): #1c7qZCFV (Programming)