2016-02-09 61 views
0

我使用Jenkins构建插件以将我的构件部署到服务器。部署文件后我通过插件Jenkins通过SSH插件发布,-1退出状态

sudo service myservice stop 

呼吁停止EEC服务,我得到的答案从发布过SSH:

SSH: EXEC: channel open 
SSH: EXEC: STDOUT/STDERR from command [sudo service myservice stop]... 
SSH: EXEC: connected 
Stopping script myservice 
SSH: EXEC: completed after 200 ms 
SSH: Disconnecting configuration [172.29.19.2] ... 
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [-1]] 
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE 
Finished: UNSTABLE 

构建失败,但该服务停止。

我/etc/init.d/myservice

#! /bin/sh 
# /etc/init.d/myservice 
# 
# Some things that run always 
# touch /var/lock/myservice 
# Carry out specific functions when asked to by the system 
case "$1" in 
    start) 
     echo "Starting myservice" 
     setsid /opt/myservice/bin/myservice --spring.config.location=/etc/ezd/application.properties --server.port=8082 >> /opt/myservice/app.log & 
    ;; 
    stop) 
     echo "Stopping script myservice" 
     pkill -f myservice 
     # 
    ;; 
    *) 
     echo "Usage: /etc/init.d/myservice {start|stop}" 
     exit 1 
    ;; 
esac 
exit 0 

请说我为什么我得到-1退出状态?

回答

2

那么,该脚本被称为/etc/init.d/myservice,所以它匹配myservice模式给予pkill -f。因为脚本正在等待pkill完成,所以它仍然活着并被杀死并因此返回-1(还有等待结果中的杀死信号,但Jenkins从属守护程序未打印它) 。

或者:

  • 来为pkill的更具体的模式,
  • 使用正确的PID文件或
  • 开关systemd,能可靠杀灭它到底启动过程中。

在这个时代,我推荐最后一个选项。 Systemd比init脚本更可靠。

1

是的,Jan Hudec是对的。我称之为发布ps ax | grep myservice通过SSH插件:

83469 pts/5 Ss+ 0:00 bash -c ps ax | grep myservice service myservice stop 

所以pkill -f myservice将影响PID 83469的过程,它是pkill的父母。据我所知,这是-1状态原因。

我将pkill -f myservice更改为pkill -f "java.*myservice",这解决了我的问题。

+0

我仍然建议看看'systemd'或者至少''start-stop-daemon'工具。它们是为Linux编写服务更可靠的方式。 –

+0

好吧,1月,我会为它的谷歌。非常感谢您的回答! – dimedrol90