通过 launchd 在关机时运行 Shell 脚本

2024-02-24

由于启动项和rc在 OS X 上,这两个命令均已弃用(并且在许多情况下根本不起作用),取而代之的是launchd,我想知道设置在注销/关闭时运行的 shell 脚本的正确方法是什么。

对于启动项,可以创建一个类似于以下内容的 shell 脚本:

#!/bin/sh
StartService() {
    echo "Started."
}

StopService() {
    echo "Stopped."
}

RunService "$1"

But the RunService运行脚本时不支持命令launchd,而且我不确定它是否还可以再使用。

如果可能的话,我想创建一个 shell 脚本来提供给launchd作为一项按需服务,它将在接近关闭时启动,并以某种方式通知系统正在关闭。

或者,我可能需要一个在登录/系统启动时打开的 shell 脚本,并保持运行(或者更确切地说,休眠)直到SIGTERM或者收到其他kill信号,以便它可以在关闭之前运行一些命令。


@gaige 感谢您的回复!最后我做了以下事情:

#!/bin/sh
StartService() {
    echo "Started"
}

StopService() {
    echo "Stopped"
    exit 0
}

StartService
trap StopService SIGTERM
while true; do
    sleep 86400 &
    wait $!
done

睡一整天应该可以防止它浪费任何处理能力,尽管让这样的东西运行并不是我最喜欢的解决方案。然而,launchd实际上没有任何标准似乎允许我的脚本仅在关闭时运行。上面的代码是在加载(登录)时运行,然后捕获SIGTERM终止、注销或关闭时。注意异步使用sleep,因为某些环境会等待睡眠完成后再执行陷阱,这是不好的launchd只允许几秒钟的时间来响应SIGTERM before SIGKILL已发送。

据我所知launchd仅支持由套接字或监视路径或其他内容触发的按需服务,这并没有真正为我提供解决方案,因为它仍然需要某种外部影响。

然而,一个有益的副作用是,我在 StartService 中获得的任何结果(例如文件指针等)都可以通过 StopService 轻松访问,因为它仅在内存中,无需保存文件。只是感觉不是最优雅的解决方案,但是嘿,如果它有效的话那就没问题了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 launchd 在关机时运行 Shell 脚本 的相关文章

  • Sqlite代码28“文件在打开时重命名”

    这是一个推论这个问题 https stackoverflow com questions 27784704 sqlite deadlock across multiple threads with different files nored
  • 当所选选项是下拉列表中已选择的选项时如何接收事件?

    动机 我想动态加载一个select使用来自 AJAX 调用的值 并允许用户select加载后列表中的第一项after它获得焦点 现在 第一项是selected项目 当您单击下拉列表并单击第一项时 什么也没有发生 我无法添加任何无效选择的占位
  • Swift 中带圆角的 NSWindow

    我想要一个圆角的窗户 但我在每个角落都有一个白点 Code let effect NSVisualEffectView frame NSRect x 0 y 0 width 0 height 0 effect blendingMode be
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他
  • sed 没有给我正确的 Mac 换行符替换操作 - GNU sed 和 BSD / OSX sed 之间的差异 [重复]

    这个问题在这里已经有答案了 我正在使用这个参考 sed 帮助 匹配和替换文字 n 不是换行符 https stackoverflow com questions 19762365 sed help matching and replacin
  • dispatch_write() 和dispatch_read() 用法

    我只是在玩一些 GCD 函数来向文件写入和读取数据 其中两个函数是dispatch write and dispatch read 它允许向文件描述符写入和读取数据 而无需设置新的dispatch io t渠道 所以 我有以下代码 impo
  • 如何确定 OS X 中的文件编码?

    我正在尝试将一些 UTF 8 字符输入到 LaTeX 文件中TextMate http en wikipedia org wiki TextMate 它说它的默认编码是UTF 8 但LaTeX似乎不理解它们 Running cat my f
  • 警告:找不到模板 /usr/local/git/share/git-core/templates

    我收到这个错误警告 找不到模板 usr local git share git core templates当我在本地存储库中克隆存储库时这个链接 https github com zikula modules Scribite issue
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 安装 libjpeg v8 到 /opt/local

    如何在 OSX 上将 libjpeg 8 安装到 opt local 我问的原因是我想用以下方法制作大脑活动的小电影MNE C 库 http www nmr mgh harvard edu martinos userInfo data MN
  • 在开发过程中自动允许访问 MacOS 辅助功能 API

    我正在开发一个使用辅助功能 API 的应用程序 每次我进行更改和重建时 我都必须删除该应用程序并将其重新添加到下面的 安全和隐私 可访问性 视图中 一段时间后这会变得非常烦人 有没有什么方法可以在开发时禁用此安全检查 或者即使应用程序本身正
  • 使用不同的苹果帐户更新 XCODE

    我的操作系统是 MAC 10 7 3 xcode 4 3 1 使用不同的 apple id 安装 因为我的 macbook pro 以前被我的朋友使用过 现在 当我尝试将 Xcode 升级到 4 3 2 时 它会询问我朋友帐户的凭据 不幸的
  • NSView 鼠标跟踪

    我在 Mac OS X 上遇到了 Cocoa NSView 的奇怪行为 我在 NSView 容器中有一个自定义 NSView 这个自定义 NSView 跟踪鼠标移动 点击 并有一个工具提示 当我在所描述的视图上方添加 NSView 时 即使
  • 未找到符号,预计出现在平面命名空间 ObjC++ 中

    我可能遇到了一个简单的问题 但是在编译过程中没有任何信息错误或警告来提醒我出了什么问题 我有一个 Objective C 应用程序 其中包含 C 主文件和 ObjC 头文件 它构建得很好 但是当运行时 它会给出以下错误消息 Dyld Err
  • 在 MLMediaLibrary 中加载媒体源时出错

    我在加载时遇到错误mediaSourcesMac OS X 中的属性 我正在尝试使用以下方法获取 Apple Photos 源MLMediaLibrary class 我的应用程序是沙盒的 并且具有图片文件夹的只读权限 我收到错误 MLMe
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • Maven:无法在 OS X 上找到 java.lang 问题

    当我尝试时遇到以下问题mvn clean install显然它无法找到运行时 jar 但我需要做什么 错误日志 ERROR COMPILATION ERROR INFO ERROR Failure executing javac but c
  • 更新 OSX 命令行工具 6.3 后缺少 C++ 标头 <__debug>

    从 App Store 更新到 Command Line Tools 6 3 后 程序包括
  • 如何在 Mac 操作系统中播放声音?

    我想在专为 Mac OS X Lion 10 7 而不是 iPhone 设计的 Objective C 应用程序中播放 mp3 文件 谢谢 看看NSSound http developer apple com library mac doc

随机推荐

  • 检查残差并可视化零膨胀泊松 r

    我正在为 CPUE 数据运行零膨胀模型 该数据有零通货膨胀的证据 我已通过 Vuong 测试 在下面的代码中 确认了这一点 根据 AIC 的说法 完整模型 zint 优于零模型 我现在想要 检查完整模型的残差以确定模型拟合 由于缺乏来自同事
  • Javascript 设置按钮处于活动状态

    我有一个按钮表 一旦填充完毕 我就会使用 document getElementById btn0 click 单击第一个按钮 该按钮正在执行其应该执行的操作 但是按钮的背景颜色并没有像我手动单击它时那样改变 正如您所看到的 当它运行时 d
  • Rails 这个查询是否对 sql 注入开放?

    我仍在学习如何使用 ActiveRecord 编写良好的查询 我很好奇这个查询是否会受到 sql 注入的影响 因为我在查询中使用日期字段的方式 有人可以指出任何明显的错误或任何更好的方法来编写这个查询吗 arrangements for m
  • MEAN.js 社交共享?

    因此 我使用 MEAN js 构建了一个应用程序 并对文章 博客 部分进行了一些更新 以实现更好的 SEO 可读性 设计等 不过 我似乎无法弄清楚的一个问题是如何共享使用 Facebook Google Twitter 等的文章 并让它们使
  • (#5) Heroku Rails APP 上出现未经授权的源 IP 地址错误

    当有人尝试通过 Facebook 登录时 我的 Heroku 应用程序 FoR 开始抛出此错误 5 Unauthorized source IP address 发生这种情况是因为我的 Heroku 机器 与其他应用程序共享 的 IP 地址
  • Silverlight 4.0 + MVC 2.0 + WCF RIA 服务 + EF 4.0 = 加载错误

    我正在尝试建立一个具有以下内容的网站 VS 2010 用于更新的 WCF RIA 服务 Silverlight 4 0 与 WCF RIA 服务打包在一起 MVC 2 EF 4 0 我将其设置为面向公众的页面将是来自 MVC 的 html
  • 配置 Microsoft Azure Web App 的远程 IIS 管理后找不到 Microsoft.Web.Configuration.AppHostFileProvider

    几个月前 我可以成功地为我的 Azure Web 应用程序配置远程 IIS 管理 更换办公室后 我发现在新计算机上配置远程 IIS 管理后 当我尝试单击我的网站时遇到以下错误 我使用 Internet 信息服务 版本 10 0 16299
  • 写入终端和文件 C++

    我发现这个问题适用于 Python Java Linux 脚本 但不适用于 C 我想将 C 程序的所有输出写入终端和输出文件 使用这样的东西 int main freopen myfile txt w stdout cout lt lt L
  • 如何在 HTML 中的 Image-Click 上播放声音?

    当我单击或将鼠标悬停在播放按钮上时 我尝试播放声音吗 这是我到目前为止所拥有的 我有一个按钮 如果我将鼠标悬停在它上面 它会更改图像 现在我还希望它播放 mp3 play a position relative float left wid
  • 请求遵循重定向而不发送数据

    我在用着请求 js https github com request request用于 Node js 中的 http 请求 request method POST uri http www example com getData fol
  • 通过 Kotlin Coroutine Flow 压缩网络请求

    我有一个通过 RxJava 压缩两个网络请求的代码 Single zip repository requestDate repository requestTime date time gt Result date time 代表着repo
  • 如何在 systemd 控制组之外启动进程

    我有一个服务器进程 从 systemd 启动 可以启动更新进程 更新过程自行守护进程 然后 理论上 使用 SIGTERM 终止服务器 我的问题是 SIGTERM 传播到更新过程这是孩子们 出于调试目的 更新进程只是休眠 然后我手动发送终止命
  • 在 Python 中根据不安全的用户输入评估数学方程

    我有一个网站 用户在其中输入数学方程 表达式 然后根据网站提供的数据 常数 评估这些方程 需要的数学运算包括符号 算术运算 min max 以及其他一些基本功能 示例方程可以是 max a b 100 a b 200 人们可以简单地eval
  • 如何从 Python 创建 Gephi 网络图?

    我刚刚了解到 GephiStreamer https pypi python org pypi GephiStreamer https pypi python org pypi GephiStreamer 使用这个包 我们可以从 pytho
  • 在 ios9 上的 uiwebview 中显示 pdf 有时滚动会卡住

    我正在开发一个用 swift xcode7 编写的 ios 应用程序 一个视图有一个UIWebView on it using loadRequest NSURLRequest 我们从磁盘加载一个 pdf 文件 这工作正常 但有时 pdf
  • 如何在没有用户密码的情况下获取 Alfresco 登录票证,但使用用户主体名称 (UPN) 模拟用户

    我正在编写一个 DLL 它具有无需使用用户密码 仅使用用户主体名称 UPN 即可获取 Alfresco 登录票证的功能 我正在调用露天 REST API 服务 wc服务 我在 Alfresco 中使用 NTLM 我冒充用户使用Windows
  • Python:-u 选项的意义?

    我注意到在一些 python 代码中 u 用于启动 python 解释器 我查看了 python 的手册页 但没有从中得到太多信息 请给我一些例子 From python help u unbuffered binary stdout an
  • 如何使用 NetBeans 6.8 UML 模块创建类图?

    在我看来 NetBeans 的 UML 模块隐藏得有点太多了 在 NetBeans 6 5 中 创建 UML 图非常容易 无需安装插件或其他东西 喜欢 读my post http karussell wordpress com 2010 0
  • Angular 2材质无法加载样式

    我开始使用 Angular Material 库作为界面在 Angular 中开发一个 Web 应用程序 但我在尝试导入预建主题时遇到错误 为了导入它 我添加了 to my index html文件但是当我运行时ng serve我无法获取该
  • 通过 launchd 在关机时运行 Shell 脚本

    由于启动项和rc在 OS X 上 这两个命令均已弃用 并且在许多情况下根本不起作用 取而代之的是launchd 我想知道设置在注销 关闭时运行的 shell 脚本的正确方法是什么 对于启动项 可以创建一个类似于以下内容的 shell 脚本