启动OSX没有使用teamcity代理运行bash
我有一个
shell脚本startup.sh,它执行以下操作(创建一个RAM磁盘并启动teamcity代理):
#!/bin/bash DISK=`/usr/bin/hdiutil attach -nobrowse -nomount ram://16777216` /usr/sbin/diskutil erasevolume HFS+ "RamDiskCache" $DISK /Users/administrator/buildAgent/bin/agent.sh start 我可以通过输入./startup.sh从命令行运行它,它运行正常.当我从launchd运行时,它只创建RAM磁盘,teamcity无法启动. 我的launchd plist位于?/ Library / LaunchAgents <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.datafinch.teamcity</string> <key>Program</key> <string>/Users/administrator/startup.sh</string> <key>RunAtLoad</key> <true/> </dict> </plist> 我错过了什么? 编辑 这是agent.sh文件: https://gist.github.com/chriskooken/19f5856e3ce3c2322c53cb0afa69b057 解决方法
您的agent.sh脚本在后台启动teamcity代理,然后退出.这与管理作业的启动方式相反 – launchd期望其作业在前台运行,可以监视它们,如果它们崩溃则重新启动它们,在适当时关闭它们等等.基本上,所有的东西都是你的使用PID文件是launchd通常会照顾你的.在这种情况下,直接的问题是当一个launchd的作业退出时(你的作业几乎立即就会在后台运行teamcity之后),launchd将清除任何剩余的混乱,包括杀死任何孤立的子进程,比如说,teamcity代理.
你有两个选择: >转换为启动的做事方式.这意味着将agent.sh脚本替换为检查先决条件,查找Java等,然后在前台运行teamcity代理的脚本.实际上,最好是它执行代理,因此代理直接作为launchd的子代运行,而不是shell的子代(它是launchd的子代);这为launchd提供了一个更直接的连接来监控和管理它.>通过添加< key> AbandonProcessGroup< / key>< true />来告诉launchd不要杀掉被遗弃的子进程.到.plist.这更简单,但选择了launchd的所有其他管理功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |