use*_*281 6 python linux background-process kubernetes
我正在尝试在容器内执行一个 Python 程序作为后台进程kubectl,如下所示(kubectl在本地机器上发布):
kubectl exec -it <container_id> -- bash -c "cd some-dir && (python xxx.py --arg1 abc &)"
当我登录到容器并检查时,ps -ef我没有看到这个进程在运行。此外,kubectl命令本身没有输出。
kubectl命令正确执行?dip*_*ark 14
nohup维基百科页面可以提供帮助;您需要重定向所有三个 IO 流(stdout、stdin 和 stderr) - 示例如下yes:
kubectl exec pod -- bash -c "yes > /dev/null 2> /dev/null &"
Run Code Online (Sandbox Code Playgroud)
nohup在上述情况下不需要,因为我没有分配伪终端(无-t标志)并且 shell 不是交互式的(无-i标志),因此在会话终止时不会HUP向进程发送信号yes。有关更多详细信息,请参阅此答案。
/dev/null在上述情况下不需要重定向到 stdin,因为 stdin 已经引用了/dev/null(您可以通过ls -l /proc/YES_PID/fd在另一个 shell 中运行来看到这一点)。
要查看输出,您可以将 stdout 重定向到文件。
要停止该进程,您需要识别要停止的进程的 PID(pgrep对于此目的可能很有用)并向其发送致命信号(kill PID例如)。
如果您想在固定持续时间后停止该过程,超时可能是更好的选择。
实际上,进行此类操作的最佳方法是向容器添加一个入口点并在那里运行执行命令。喜欢:
entrypoint.sh:
#!/bin/bash
set -e
cd some-dir && (python xxx.py --arg1 abc &)
./somethingelse.sh
exec "$@"
Run Code Online (Sandbox Code Playgroud)
您不需要手动进入每个容器并运行命令。
| 归档时间: |
|
| 查看次数: |
9531 次 |
| 最近记录: |