gpt4 book ai didi

python - CI 与 Jenkins : restart python bjoern server with Jenkins shell script

转载 作者:行者123 更新时间:2023-12-04 19:03:16 25 4
gpt4 key购买 nike

我有一个连接到 Bitbucket 存储库的 Jenkins。当一些东西被推送到存储库时, Jenkins 开始工作。该作业从存储库(server.py:它基本上是一个 bjoern 服务器)中获取所有数据。
我现在要做的是停止正在运行的 server.py-process 并使用更改的数据重新启动它。这应该通过 jenkins 运行的以下 bash 脚本来完成:

#!/bin/bash
PID=$(ps ax | grep 'server.py')
kill $PID

我的问题是我的 ubuntu 服务器上的 jenkins 用户无法杀死 server.py 进程。
怎样才能杀死进程?

或者是否可以通过函数调用捕获 server.py 进程并停止 bjoern 服务器实例?

最佳答案

无论您在哪里运行进程,您尝试检索 PID 的方式都是不正确的。
PID=$(ps ax | grep 'server.py')不会给你PID。它将返回的不仅仅是 PID。

检查以下示例:

[root@jenkins ]# ps -ef | grep xinetd
root 1528 1 0 Aug28 ? 00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root 9827 9806 0 17:34 pts/1 00:00:00 grep xinetd

正如您从上面的输出中可以意识到的那样,您必须过滤掉您需要的过程,这可以通过以下方式完成:
[root@jenkins ]# ps -ef | grep xinetd | grep -v grep
root 1528 1 0 Aug28 ? 00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid

从上面的输出可以看出,它只返回我们需要从中获取 PID 的行。最后一个命令给你你想要的,即 PID
[root@jenkins ]# ps -ef | grep xinetd | grep -v grep | awk -F' ' '{print $2}'
1528

所以,而不是你正在使用的,使用:
PID=$(ps -ef | grep xinetd | grep -v grep | awk -F' ' '{print $2}')

或者

如果您已经知道进程名称,那么您可以简单地使用命令 pidof .
[root@jenkins ]# pidof xinetd
1528

关于python - CI 与 Jenkins : restart python bjoern server with Jenkins shell script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26073856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com