python - 使用 kubectl exec 运行后台进程

标签 python linux kubernetes background-process

我正在尝试将 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/

相关文章:

python - 使用 Python 在 PostgreSQL 数据库上进行快速复杂的 SQL 查询

python - 无需 lambda 即可减少

kubernetes - fluentd-es-v1.22 DaemonSet 不创建任何 pod

库伯内特斯 : Failed to retrieve auth configuration for ingress

python - 如何将 str.replace() 与替换字典一起使用? Python

python - 错误 : "' dict' object has no attribute 'iteritems' "

linux - 如何在 Linux 终端中显示 GUI 应用程序的窗口标题

linux - 使用 gSOAP 通过 WCF Windows 服务下载文件

linux - 在 Centos 8 上升级软件包后出现非法指令(核心转储)

kubernetes - 调整 Kubernetes 作业行为,保留 kubernetes pod 日志