我有一个在 AWS 上运行的 Ubuntu Linux ec2 实例。我使用了以下命令
nohup php script.php
这样当我使用 SSH 断开与实例的连接时,它仍会运行。该脚本包含一个巨大的循环,大约需要 4 天才能完成。
for($i=0;$i<1000000;$i++) {
// It does other stuff that's kind of irrelevant
echo $i.'\n';
}
我每隔几个小时就用检查nohup.out
文件,vim editor
看看它是否仍在附加。它似乎已停止附加。但是,ps -ef
在终端中输入时,显示脚本仍在运行。
有任何想法吗?
答案1
首先想到的是包含此文件的文件系统可能已满。程序每次尝试写入文件时都会出错,但它可能会忽略这些错误。
如果 EC2 实例具有该程序的副本strace
,则可以使用它来了解该程序正在做什么:
strace -p pid-of-process
将列出进程正在执行的所有系统调用。如果程序主要执行文件 I/O,则:
strace -e trace=file -p pid-of-process
将仅列出正在执行的文件系统操作。这可能更容易解释。无论哪种方式,这都会让您了解程序正在做什么。