启动 OSX 时未使用 teamcity 代理运行 bash

2024-06-22

我有一个 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>

我缺少什么?

EDIT

这是agent.sh文件:

https://gist.github.com/chriskooken/19f5856e3ce3c2322c53cb0afa69b057 https://gist.github.com/chriskooken/19f5856e3ce3c2322c53cb0afa69b057


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

你有两个选择:

  • 转换为 launchd 的处理方式。这意味着将 agent.sh 脚本替换为执行检查先决条件、查找 Java 等操作的脚本,然后运行 ​​teamcity 代理在前台。事实上,如果这样可能是最好的execs 代理,因此代理直接作为 launchd 的子级运行,而不是作为 shell 的子级(shell 是 launchd 的子级)运行;这为 launchd 提供了更直接的连接来监视和管理它。
  • 告诉 launchd 不要通过添加来杀死废弃的子进程<key>AbandonProcessGroup</key><true/>到.plist。这更简单,但会选择您退出 launchd 的所有其他管理功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启动 OSX 时未使用 teamcity 代理运行 bash 的相关文章

  • bash:使用 scp 检查远程文件是否存在

    我正在编写一个 bash 脚本来将文件从远程服务器复制到本地计算机 我需要检查该文件是否可用 以便在该文件不存在时可以采取替代操作 我知道如何测试本地文件是否存在 但是 使用 scp 会使事情变得有点复杂 常识告诉我 一种方法是无论如何尝试
  • 通过 SSH 启动长时间运行的程序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个运行 Ubuntu 的虚拟机 并且我可以通过 SSH 很好地连接到该虚拟机 我什至可以使用以下命令通过 SSH 启动我的 pyth
  • 具有此处文档重定向的 Makefile 配方

    有谁知道如何在菜谱上使用此处文档重定向 test sh lt
  • Bash 脚本在 for 循环中使用 sed 和变量?

    我正在尝试编写一个 bash 脚本 该脚本需要一些变量 然后使用 grep 对给定文件搜索进行查找 替换 以获取包含该字符串的文件列表 我认为我遇到的问题是在 sed 中看到变量我不确定它可能是什么 if searchFiles a old
  • OS X bash:目录名

    我想创建一个简单的 bash 脚本来在 OS X 上启动 Java 程序 文件名 文件路径和直接工作文件夹都包含空格 当我这样做时 bin sh cd dirname 0 I get usage dirname path 我也尝试过在各种不
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • 如何从 tcl 脚本调用 bash 命令?

    Bash 命令可从交互式 tclsh 会话中获得 例如 在 tclsh 会话中 您可以 ls 代替 exec ls 但是 您不能有一个直接调用 bash 命令的 tcl 脚本 或者没有exec 如何使 tclsh 在解释 tcl 脚本文件时
  • 致命错误:找不到“Fabric/Fabric.h”文件

    我正在使用 xcode 6 3 1 OSX 10 10 3 并且我已经在本地系统上成功配置了 crashlytics 它工作正常 并通过 Fabric 应用程序发布构建 但是当我将相同的代码库转移到 teamcity 时 它向我显示以下错误
  • 如何在每个 xargs 命令之间休眠 1 秒?

    例如 如果我执行 ps aux awk print 1 xargs I echo 我想让 shell 在每次之间休眠 1 秒echo 如何更改我的 shell 命令 您可以使用以下语法 ps aux awk print 1 xargs I
  • 使用 Bash 显示进度指示器(旋转器)[重复]

    这个问题在这里已经有答案了 使用仅 bash 的脚本 如何提供 bash 进度指示器 例如 当我从 bash 运行命令时 当该命令正在执行时 让用户知道某些事情仍在发生 在这个使用 SCP 的示例中 我演示了如何获取进程 ID pid 然后
  • 删除所有出现的重复行

    如果我想删除某些字段重复的行 那么我使用 sort u k n n 但这仍然发生一件事 如果我想删除所有出现的重复项 有没有快速的 bash 或 awk 方法可以做到这一点 例如我有 1 apple 30 2 banana 21 3 app
  • 寻找 shell 重定向交错行为的解释

    给定以下脚本 t sh bin bash if eq 0 then log if gt 0 then printf s n else cat fi tee a logged out else log if gt 0 then printf
  • Bash:将输出传输到后台进程?

    我想将一个进程放入后台 然后多次将数据传递给它 例如 cat The command I want to write into cat pid Getting the process id of the cat process echo h
  • Bash - 在文件名中间添加 0

    我有一堆文件 其名称为 mem0 csv内存1 csv mem153 csv 它们都在同一个文件夹中 当我在文件夹中执行 ls 时 它们按以下顺序显示 mem0 csv内存1 csvmem10 csvmem100 csv 内存2 csvme
  • 从 Bash 中的字符串中删除固定前缀/后缀

    我想从字符串中删除前缀 后缀 例如 给定 string hello world prefix hell suffix ld 我如何得到以下结果 o wor prefix hell suffix ld string hello world f
  • 在 BASH 中按字节读取文件

    我需要读取指定文件的第一个字节 然后读取第二个字节 第三个字节 依此类推 我怎样才能在 BASH 上做到这一点 P S 我需要获取这个字节的十六进制 完全重写 2019 年 9 月 比以前的版本更短更简单 速度更快 但没那么快 Yes ba
  • git:每日更新日志

    如何生成按日期分组的提交变更日志 格式为 date today commit message1 commit message2 commit message3 date day 3 commit message1 commit messag
  • Teamcity NuGet 存储库损坏

    所以 我的谷歌福很弱 我找不到另一个我的错误实例 从一天起 我的 teamcity nuget 存储库就出现了问题 NuGet 从存储库下载失败 并出现意外的 EOF 或损坏的包警告 据我所知 这不是硬件故障 虚拟机和虚拟机主机不会报告磁盘
  • bash get 命令在管道符号之前使用

    对于已经使用程序输出的半成品脚本 我还需要用于通过管道传输到我的脚本的程序的名称和参数 所以我这样运行 yay something myscript现在我需要将 yay Something 存储到变量中 有一种方法可以获取以前运行的命令或当
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value

随机推荐