我在centos9Server中使用Jenkins。我的意图是Jenkins将杀死现有的Java进程,并重新启动新的build。以前,我对centos 8使用了相同的命令,但是在安装Centos 9之后,我就面临着这个问题。
process=`ps -ef | grep -v awk | awk -e '/java.*iqa/ { print $2 }'`
kill -9 ${process}
下面的错误信息,我得到。怎么才能解决?
++ ps -ef
++ grep -v awk
++ awk -e '/java.*iqa./ { print $2 }'
+ process=57623
+ kill -9 57623
/tmp/jenkins15731163701833690666.sh: line 4: kill: (57623) - Operation not permitted
Build step 'Execute shell' marked build as failure
发布于 2022-07-23 03:30:33
apropos kill errno
和阅读手册上的杀灭系统调用和错误代码。不允许操作的是EPERM
。每man 2 kill
要使进程具有发送信号的权限,它必须具有特权(在Linux下:在目标进程的用户名称空间中具有CAP_KILL功能),或者发送进程的实际或有效用户ID必须等于目标进程的真实或保存的设置用户ID。
检查PID和jenkins shell,看看用户是如何不同的。还可以查看使用SELinux的ps Z
上下文。不同的用户一般都是一件好事,它提供了更好的隔离。在这种情况下,在部署工具和它安装的应用程序之间。
考虑在服务管理器中运行应用程序。在这样的系统Linux系统上,服务单元是一种选择。在编写了这样一个单元之后,您可以给jenkins用户通过PolicyKit规则访问管理单元。当然,对jenkins脚本进行相应的更改,以运行systemctl
命令来管理服务。将使ps和杀死命令过时,更好地处理单元进程。
将其移动到服务管理器中,就可以控制要运行的用户。您将在此单元上进一步增强和启用PrivateUsers=
或DynamicUser=
,将Java用户与系统的其他部分完全断开。詹金斯仍然可以停下来开始服务。
与系统一起使用的主要缺点是,它不能移植。对于非Linux系统,您将需要一些其他解决方案。
https://serverfault.com/questions/1106375
复制相似问题