通过 atd 生成脚本导致进程停滞在等待状态

通过 atd 生成脚本导致进程停滞在等待状态

我有一个bash通过运行的脚本at,我像这样运行它是 echo "bash /path/to/my/script.sh" | at -M now因为我希望它分离运行。

脚本生成后,我立即看到 2 个实例 ( ps),即使脚本成功完成,另一个实例也不会终止。它将重新设置为 pid1并继续等待 (strace显示wait4(-1...)。

我无法弄清楚为什么或如何分叉第二个实例!当我运行没有的脚本时at,我看不到第二个进程。有什么提示/技巧可以调试这个吗?

谢谢。

答案1

查看这个简单的脚本:

#!/bin/bash

exec >/tmp/$$.log
exec 2>/tmp/$$-2.log

set -x

echo "1"
echo "2" >&2

这会将脚本 stdout 和 stderr 的整个输出重定向到指定的日志文件(在本例中/tmp/<pid>.log为 和/tmp/<pid>-2.log),并且日志文件的 stderr 部分将包含它执行的每个命令。您可以使用此输出来跟踪脚本的执行情况并查看它挂起的位置...

17958-2.log的内容:

+ echo 1
+ echo 2
2

相关内容