[问题] 关于观察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