【问题标题】:Launchd OSX not running bash with teamcity agent启动的 OSX 未使用 teamcity 代理运行 bash
【发布时间】:2017-05-06 02:04:11
【问题描述】:

我有一个 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 不会启动。

我的已启动 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

【问题讨论】:

  • @andlrc 抱歉,这只是我最后一次尝试。我已经更新了问题
  • /Users/administrator/buildAgent/bin/agent.sh 中有什么内容?
  • @MarkSetchell 我在问题中添加了该文件的要点
  • 我怀疑问题几乎可以肯定是您的脚本中没有指定 PATH 并且launchd 下的环境与运行交互式 shell 时的环境不同。
  • 尝试在你的shell中运行env &gt; /tmp/a,在你的startup.sh中运行env &gt; /tmp/b,然后运行opendiff /tmp/{a,b}

标签: bash teamcity launchd


【解决方案1】:

您的 agent.sh 脚本在后台启动 teamcity 代理,然后退出。这与 launchd 管理作业的方式相反——launchd 期望它的作业在前台运行,在那里它可以监控它们,如果它们崩溃则重新启动它们,在适当的时候关闭它们等等。基本上,你的所有东西使用 PID 文件是 launchd 通常会为您处理的。在这种情况下,直接的问题是,当 launchd 的一个作业退出时(您的作业几乎立即执行,在后台运行 teamcity 之后),launchd 将清理所有剩余的混乱,包括杀死任何孤立的子进程,例如,比如,teamcity 代理

你有两个选择:

  • 转换为launchd的做事方式。这意味着将 agent.sh 脚本替换为执行检查先决条件、查找 Java 等操作的脚本,然后在前台运行 teamcity 代理。实际上,最好是execs 代理,因此代理直接作为launchd 的子级运行,而不是shell 的子级(它是launchd 的子级);这为 launchd 提供了更直接的连接来监控和管理它。
  • 通过将&lt;key&gt;AbandonProcessGroup&lt;/key&gt;&lt;true/&gt; 添加到.plist 来告诉launchd 不要杀死废弃的子进程。这更简单,但会让您退出所有 launchd 的其他管理功能。

【讨论】:

  • 这非常有效。我现在使用 AbandonProcessGroup。谢谢!
猜你喜欢
  • 2013-08-26
  • 2018-03-09
  • 2017-09-29
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
相关资源
最近更新 更多