gpt4 book ai didi

jenkins - 使用 SSH(脚本、插件等)启动进程

转载 作者:行者123 更新时间:2023-12-05 01:07:43 41 4
gpt4 key购买 nike

我试图通过重新启动使我的 Python 应用程序正常工作的两个进程来完成远程部署。像这样

process-one &
process-two &

我尝试通过执行此操作来“执行 Shell 脚本”
ssh -i ~/.ssh/id_... user@xxx.xxx ./startup.sh

我试过使用 Jekins SSH PluginPublish Over SSH Plugin并做同样的事情。前面的所有步骤,停止进程,重新启动其他服务,引入新代码都可以正常工作。但是当我到达我开始服务的部分时。它执行这两行,并且没有任何插件或默认脚本执行可以离开服务器。它们要么挂起,直到我重新启动 Jekins,要么在 Publish Over SSH 插件的情况下超时。所以我的构建要么需要重启 Jenkins,要么被标记为不稳定。

有没有人做过类似的事情?我试过了
nohup process-one &

但同样的事情也发生了。也不是服务搞砸了,因为它们实际上可以正常启动,只是 Jenkins 似乎不明白这一点。

任何帮助将不胜感激。谢谢你。

最佳答案

可能发生的情况是该进程在生成时(即使使用 &)消耗与 ssh 连接相同的输入和输出。 Jenkins 正在等待这些管道在作业关闭之前清空,从而等待进程退出。您可以通过终止进程来验证这一点,您将看到 jenkins 作业终止。

分离输出并远程启动进程

您的问题有多种解决方案:

  • ( 首选 ) 使用适当的守护进程控制工具。您的目标平台可能有管理这些服务的标准方法,例如init.d 脚本。请注意,在编写 init.d 脚本时,请确保在后台分离进程并确保守护进程的输入/输出与启动它们的 shell 分离。有几种技术,比如 http://www.unix.com/man-page/Linux/8/start-stop-daemon/ tools、daemonize、daemontools 或类似 https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Unix+daemon 下描述的 shell 脚本的东西(注意 su -s bin/sh jenkins -c "YOUR COMMAND; ...disown"等)。我还在下面列出了一些特定于 python 的技术。
  • ssh 服务器 '程序 /dev/null 2>&1 &'

    或者

    ssh server 'program > logfile.log 2>&1 &' 如果你想有一个粗略的输出管理(没有日志轮换等...)
  • 可能使用 setsid(我没试过)https://superuser.com/questions/172043/how-do-i-fork-a-process-that-doesnt-die-when-shell-exits .在我的快速测试中,我无法让它工作...

  • Python 守护进程

    最初的问题集中在 SSH 上,所以我没有完整描述如何将 python 进程作为守护进程运行。这主要包含在其他技术中:
  • 使用启动停止守护程序:start-stop-daemon and python
  • ubuntu 上的 Upstart :Run python script as daemon at boot time (Ubuntu)
  • 一些更面向 python 的方法:
  • How to make a Python script run like a service or daemon in Linux
  • Can I run a Python script as a service?
  • 关于jenkins - 使用 SSH(脚本、插件等)启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234209/

    41 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com