使用Jenkins的CI:使用Jenkins shell脚本重新启动pythonbjoern服务器

2024-06-25 23:59:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个詹金斯和一个比特桶储存库相连。当某个东西被推到存储库时,詹金斯开始工作。此作业从存储库获取所有数据(服务器.py:基本上是一个bjoern服务器)。 我现在要做的是停止服务器.py-正在运行的进程,并使用更改的数据重新启动它。这应该通过以下由jenkins运行的bash脚本来完成:

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

我的问题是我的ubuntu服务器上的jenkins用户不能杀死服务器.py过程。 怎么能扼杀这个过程?在

或者有可能抓住服务器.py使用函数调用处理并停止bjoern服务器实例?在


Tags: 数据py服务器脚本bashbin进程过程
1条回答
网友
1楼 · 发布于 2024-06-25 23:59:30

不管您在哪里运行进程,您试图检索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

正如您可以从上述输出中了解到的,您将需要过滤掉您需要的流程,这可以通过以下方式完成:

^{pr2}$

从上面的输出中可以看到,它只返回需要从中获取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

相关问题 更多 >