我有一个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