我正在尝试将 Python 程序作为容器内的后台进程执行 kubectl
如下(kubectl
在本地机器上发布):
kubectl exec -it <container_id> -- bash -c "cd some-dir && (python xxx.py --arg1 abc &)"
当我登录容器并检查 ps -ef
时我没有看到这个进程在运行。此外,kubectl
没有输出命令本身。
- 是
kubectl
命令是否正确发出? - 有没有更好的方法来实现同样的目标?
- 如何查看正在运行的后台进程打印的输出/日志?
- 如果我需要在一段时间后停止此后台进程,最好的方法是什么?
最佳答案
nohup维基百科页面可以提供帮助;您需要重定向所有三个 IO 流(stdout、stdin 和 stderr)- yes
的示例:
kubectl exec pod -- bash -c "yes > /dev/null 2> /dev/null &"
nohup
在上述情况下不是必需的,因为我没有分配伪终端(没有 -t
标志)并且 shell 不是交互式的(没有 -i
标志)因此在 session 终止时没有HUP
信号发送到yes
进程。参见 this回答更多详情。
在上述情况下不需要将 /dev/null
重定向到 stdin,因为 stdin 已经引用了 /dev/null
(您可以通过运行 看到这一点ls -l/proc/YES_PID/fd
在另一个 shell 中)。
要查看输出,您可以改为将标准输出重定向到文件。
要停止进程,您需要确定要停止的进程的 PID(pgrep 可用于此目的)并向其发送致命信号(kill PID
例如)。
如果你想在一段固定的时间后停止进程,timeout可能是更好的选择。
关于python - 使用 kubectl exec 运行后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49244935/