2014-09-27 4 views
0

Jenkins가 Bitbucket 저장소에 연결되었습니다. 저장소에 푸시 된 것이 있으면 Jenkins가 작업을 시작합니다. 이 작업은 저장소 (server.py : 기본적으로 서버)에서 모든 데이터를 가져옵니다. 지금하고 싶은 것은 실행중인 server.py 프로세스를 중지하고 변경된 데이터로 다시 시작하는 것입니다. 이것은 젠킨스에 의해 실행되는 다음 bash는 스크립트에 의해 수행되어야합니다 :Jenkins와 CI : Jenkins 쉘 스크립트를 사용하여 python bjoern 서버 다시 시작

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

내 문제는 내 우분투 서버에서 젠킨스 사용자가 server.py 프로세스를 죽일 수 없다는 것입니다. 어떻게 프로세스를 종료 할 수 있습니까?

또는 server.py 프로세스를 catch하고 bjoern 서버 인스턴스를 함수 호출로 중지 할 수 있습니까?

+0

python 프로세스가 작업을 실행중인 컴퓨터에서 실행되고 있습니까? 또한 오류가 무엇입니까? – Technext

+0

/etc/sudoers를 편집 할 때의 문제점을 해결했습니다. 다음 줄을 추가했습니다. "jenkins ALL = NOPASSWD : ALL". 나는 이것이 매우 안전하지 않다는 것을 안다. 특정 폴더에서 kill/sh/... 호출 권한을 어떻게 제한 할 수 있습니까? – Fauphi

+0

'sudoers' 파일을 살펴 보았 으면하고 거기에 제공된 옵션으로 어떻게 이점을 얻을 수 있었으면 좋겠어요. '특정 폴더로 강제 이동 '의 사용을 제한하여 무슨 뜻인지 모르겠습니다. 그러나 특정 사용자가 특정 폴더 (또는 하위 폴더)에서'chmod' 만 실행할 수있는 것과 같은 다른 명령 사용을 제한 할 수 있습니다. 문제는, 만약 당신이 독점적으로 관리하는 스크립트를 가지고 있다면, 스크립트가 정말로 나쁜 것을하지 않는 한, 이런 것들은별로 중요하지 않습니다. 나는'rm' 종류의 물건을 의미합니다. – Technext

답변

1

프로세스를 실행하는 위치와 관계없이 PID를 검색하는 방법이 올바르지 않습니다.

PID=$(ps ax | grep 'server.py') 당신에게 PID를주지 않습니다. 그것은 PID 이상을 반환 할 것입니다.

[[email protected] ]# ps -ef | grep xinetd | grep -v grep 
root  1528  1 0 Aug28 ?  00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid 
: 위의 출력에서 ​​실현할 수 있듯이

[[email protected] ]# 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 

, 당신은 필터 밖으로하여 수행 할 수 있습니다 당신이 필요로하는 과정에있을 것이다 :

아래의 예를 확인

위의 출력에서 ​​알 수 있듯이 PID를 가져와야하는 행만 반환합니다. 이 마지막 명령을 대신 사용하고있는, 사용, 그래서 PID를,

[[email protected] ]# 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을 사용할 수 있습니다.

[[email protected] ]# pidof xinetd 
1528 
+0

감사합니다 Technext, 바로 PID를 얻는 문제를 해결. – Fauphi

+0

@Fauphi : 대답이 도움이된다면, 당신은 그것을 upvote 할 수 있습니다. :) – Technext