Squ*_*uab 4 jenkins jenkins-plugins
我正在尝试通过重新启动使我的Python App工作的两个进程来完成远程部署.像这样
process-one &
process-two &
Run Code Online (Sandbox Code Playgroud)
我试过这样做"执行一个Shell脚本"
ssh -i ~/.ssh/id_... user@xxx.xxx ./startup.sh
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Jekins SSH插件和发布SSH插件并做同样的事情.所有前面的步骤,停止进程,重新启动其他服务,拉入新代码工作正常.但是当我到达我开始服务的那一部分时.它执行这两行,并且插件或默认脚本执行都不能脱离服务器.它们都会挂起,直到我重新启动Jekins或者在发布通过SSH插件的情况下超时.所以我的构建需要重启Jenkins,或者标记为不稳定.
有没有人做过类似的事情?我试过了
nohup process-one &
Run Code Online (Sandbox Code Playgroud)
但同样的事情发生了.并不是说服务也搞乱了,因为它们实际上是正常启动的,只是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中描述的shell脚本. jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Unix+daemon(注意su -s bin/sh jenkins -c"你的命令; ......不再"等).我还列出了一些python特定的技术.
ssh服务器'程序</ dev/null>/dev/null 2>&1&'
要么
ssh服务器'程序</ dev/null >> 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进程作为守护进程运行.这主要包括在其他技术中:
| 归档时间: |
|
| 查看次数: |
4946 次 |
| 最近记录: |