【问题标题】:CI with Jenkins: restart python bjoern server with Jenkins shell scriptCI 与 Jenkins:使用 Jenkins shell 脚本重新启动 python bjoern 服务器
【发布时间】:2014-09-27 10:48:34
【问题描述】:

我有一个连接到 Bitbucket 存储库的 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 服务器实例?

【问题讨论】:

  • python 进程是否在您运行作业的同一台机器上运行?另外,您遇到了什么错误?
  • 解决了编辑 /etc/sudoers.我添加了以下行“jenkins ALL = NOPASSWD:ALL”。我知道这不是很安全。如何限制在特定文件夹上调用 kill/sh/... 的权利?
  • 我希望您一定已经浏览过sudoers 文件以及如何从其中提供的选项中受益。我不确定您所说的限制使用 kill to a specific folder 是什么意思。但是,您可以将其他命令的使用限制为特定文件夹,例如特定用户只能在给定文件夹(或子文件夹)中运行 chmod 或类似内容。问题是,如果您有一个完全由您管理的脚本,那么这些事情应该无关紧要as long as the script isn't doing something really bad。我的意思是rm 之类的东西。
  • 我还想提一提的是,当您尝试让某个应用程序运行命令时,在这种情况下,您应该始终尝试使用命令行运行命令一次,然后看看情况如何。在您满意之后,您才应该将这些责任交给其他人(例如Jenkins)。它还可以节省您可能花费在调试上的时间,因为将涉及更多变量。 :)

标签: python ubuntu jenkins kill


【解决方案1】:

无论您在哪里运行进程,您尝试检索 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

【讨论】:

  • 感谢 Technext,解决了获取正确 PID 的问题。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2019-02-08
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多