Jenkins具有通过SSH发布插件,-1退出状态

Jenkins具有通过SSH发布插件,-1退出状态,jenkins,ssh,Jenkins,Ssh,我使用Jenkins进行构建,并使用插件将工件部署到服务器。部署文件后,我通过调用插件中的eec停止了服务 sudo service myservice stop 我从SSH上发布收到了答案: SSH: EXEC: channel open SSH: EXEC: STDOUT/STDERR from command [sudo service myservice stop]... SSH: EXEC: connected Stopping script myservice SSH: EXEC:

我使用Jenkins进行构建,并使用插件将工件部署到服务器。部署文件后,我通过调用插件中的eec停止了服务

sudo service myservice stop
我从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
生成失败,但服务已停止

My/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退出状态?

好吧,脚本名为/etc/init.d/myservice,因此它与给定给pkill-f的myservice模式匹配。由于脚本正在等待pkill完成,因此它仍然处于活动状态并被杀死并返回-1,因此等待的结果中也有杀死信号,但Jenkins slave守护进程没有打印它

要么:

提出更具体的pkill模式, 使用适当的pid文件或 切换到systemd,它可以准确可靠地终止它启动的进程。
在这个时代,我推荐最后一个选择。Systemd只是比init脚本可靠得多。

这个脚本名为/etc/init.d/myservice,因此它与给定给pkill-f的myservice模式相匹配。由于脚本正在等待pkill完成,因此它仍然处于活动状态并被杀死并返回-1,因此等待的结果中也有杀死信号,但Jenkins slave守护进程没有打印它

要么:

提出更具体的pkill模式, 使用适当的pid文件或 切换到systemd,它可以准确可靠地终止它启动的进程。
在这个时代,我推荐最后一个选择。Systemd比init脚本可靠得多。

是的,Jan Hudec是对的。我在通过SSH发布插件中调用ps ax | grep myservice:

 83469 pts/5    Ss+    0:00 bash -c ps ax | grep myservice service myservice stop  
因此,pkill-f myservice将影响PID 83469的进程,PID 83469是pkill的父进程。据我所知,这是-1状态原因


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

是的,Jan Hudec是对的。我在通过SSH发布插件中调用ps ax | grep myservice:

 83469 pts/5    Ss+    0:00 bash -c ps ax | grep myservice service myservice stop  
因此,pkill-f myservice将影响PID 83469的进程,PID 83469是pkill的父进程。据我所知,这是-1状态原因


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

我仍然建议查看systemd或至少是start-stop守护程序实用程序。它们是为Linux编写服务的更可靠的方式。好的,一月。我会用谷歌搜索它。非常感谢你的回答!我仍然建议查看systemd或至少是start-stop守护程序实用程序。它们是为Linux编写服务的更可靠的方式。好的,一月。我会用谷歌搜索它。非常感谢你的回答!