问题标签 [launch-daemon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
364 浏览

macos - OSX:为什么我的启动代理运行我的脚本两次?

我有一个与这个启动代理关联的 plist。中列出了一个代理launchctl list,每当 mac 从睡眠中唤醒时,它都会调用我的 bash 脚本,称为 rc.wakeup。此 bash 脚本只有一份副本。bash 脚本中的代码不再重复。尽管如此,bash 脚本还是被完整地执行了两次。为什么?

编辑:我创建了一个安装 bash 脚本和一个卸载 bash 脚本。我一直在连续执行这些,试图让两个脚本都能正常工作,这样任何人都可以使用这个程序。我相信不正确地安装/卸载这些文件会导致问题,尽管我不知道为什么会这样。

0 投票
1 回答
460 浏览

mysql - 如果我不希望守护程序自动加载和/或启动,那么启动文件应该如何?

我正在为我不想自动启动的 MySQL 添加一个启动文件。只是想知道我应该在文件中更改什么。

/Library/LaunchDaemons/com.mysql.mysql.plist

0 投票
1 回答
132 浏览

macos - 使用 CFEvents 从 Mac 中的守护进程执行键盘事件

我在模拟 OSX 中的键盘事件的守护程序(根进程)中有以下代码。

当我在 User1 中并且守护程序加载到 Root 上下文中时,键盘事件可以很好地模拟。当我切换到 User2 时,除 Shift 键之外的所有事件都成功执行。出于某种原因,尽管我当前登录到 User2,但在 User1 中执行了 Shift 键的键盘事件。

我也尝试过使用移位掩码:

这在 User1 中也可以正常工作。当我切换到 user2 并执行如上所示的关键事件时,它会在 User1 的最前面的应用程序中执行这些事件。Shift 键按下或任何带有 Shift 掩码的键按下的事件转到 User1,而不是当前登录的用户

无论如何我可以确保在登录用户中执行键盘事件?

0 投票
1 回答
1292 浏览

macos - OSX - 将我的命令行二进制启动守护进程和依赖 dylibs 放在哪里

我有一个命令行应用程序(不是 .app 包),一个可执行文件。它从例如运行usr/bin/myapp。mac 中的所有用户都应该可以访问它。它是一个 LaunchDaemon 并以root用户身份运行。如果我把它放在里面,usr/bin它工作正常。

当用户安装应用程序时,pkgbuild将文件复制到/usr/binpostinstall脚本启动 LaunchDaemon。

该应用程序取决于nss库。所以现在我需要将 nss 二进制文件和 dylib 文件复制到某个usr/bin/lib/nss文件夹中。是否可以使用pkgbuildpreinstall脚本?由于pkgbuild --install-location设置为/usr/bin将复制到myapp那里,但是如何将 nss 文件夹复制到usr/lib

另一种选择是制作一个完整的文件夹结构/usr/bin/MyApp并将我的myapp二进制文件复制到那里并将文件保存nss/usr/bin/MyApp/nss文件夹中。但这是个好主意吗?

或者我应该将文件结构设置为/usr/local/MyApp?以 root 用户身份运行 myapp LaunchDaemon 的最佳位置是哪个? /usr/local还是usr/bin其他地方?

0 投票
1 回答
973 浏览

macos - OS X - 真正的“按需”特权帮助工具

我的应用程序需要将文件写入文件系统上的受限位置。
为此,我使用了一个以 root 身份运行的帮助工具。

一切正常,按照这个示例,我的帮助工具已正确安装并运行。我使用此解决方案能够“唤醒”辅助工具,否则在初始加载后它不会启动超过一次。

辅助工具正在等待来自主应用程序的消息,并正确执行它们。我还有一条消息要求该工具关闭,它也可以正常工作。

问题是launchd每次退出时都会重新启动该工具,无论我在launchd.plist文件中指定什么键。
我不希望帮助工具永远运行,等待消息,而是仅按需启动。

问题:辅助工具每次结束都重启正常吗?如果没有,如何让它死掉并按需重启?

这是launchd.plist内容:

当然,我尝试了各种键和值的组合,以及帮助工具的各种退出状态代码。它没有以任何方式改变launchd管理过程。

0 投票
1 回答
1839 浏览

macos - launchctl 无法运行或加载 plist 时是否有任何情况?

有时我看到触发命令根本不会加载应用程序。这种情况很少发生,但是否有任何已知条件或情况会导致此命令失败?有没有办法调试launchctl?

plist的内容是:

launchctl dumpstate显示状态=等待。为什么?

任何帮助都将是可观的。

0 投票
1 回答
179 浏览

ios - Program 和 ProgramArguments 有什么不同

是否有任何参考可以说明launchdaemon.plist 中的“程序”和“程序参数”之间的区别?

我看到有些plist只有'ProgramArguments',但有些也有'Program',我想明确一下。

提前致谢。

0 投票
1 回答
96 浏览

ios - 启动 iOS 模拟器后运行我的应用程序

我想在 iOS 模拟器启动后(可能在 SpringBoard 启动后)在后台自动运行我的应用程序。

在越狱的 iOS 设备上,我可以通过在 /Library/LaunchDaemons 中放置一个 launchd.plist 文件来完成此操作。

有没有办法在模拟器中按设备执行此操作?

0 投票
1 回答
1622 浏览

objective-c - 如何使用 Objective C 在 OSX 上进行特权提升

我在 Objective C 中制作的 Mac OSX 上基于 Cocoa 的自定义 setup.app 需要安装 LaunchDaemon 来执行提升权限的任务,例如需要扫描整个硬盘驱动器并因此需要 root 权限的防病毒程序。如何让我的设置应用程序提示客户进行管理员登录,然后将该 LaunchDaemon 安装到 /Library/LaunchDaemons 中(注意我不是指 ~/Library/LaunchDaemons)?

我目前处理它的方式是使用具有管理员权限的 AppleScript。它会提示此登录,然后 AppleScript 会在没有操作系统抱怨的情况下将其复制到此文件夹中。但是,我认为这不是正确的技术——我应该以某种方式完全在 Objective C 中这样做?

请注意,在这种情况下我不能使用 SMBlessJob,因为正是出于这个原因,我首先创建了 Launch Daemon。

背景资料

我特别需要创建一个自定义 setup.app——就像诺顿的 AV 应用程序使用自定义 setup.app 一样。这是因为 Apple PKG 和 DMG 安装程序不允许在安装过程中从服务器下载非常大的文件(如病毒定义)并提供某种友好的反馈。我的意思是,当运行 Perl 脚本或 Bash 脚本时,我可以让 PKG 文件从服务器下载文件,但是安装程序只会在下载所需的分钟数内挂起进度条,而不给任何其他反馈用户除了挂起的进度条,所以用户认为安装程序坏了,其实不是。这就是为什么我必须制作自己的自定义 setup.app,就像诺顿为他们的 AV 应用程序所做的那样。

0 投票
1 回答
1767 浏览

macos - Launchd 使用手动“launchctl start”运行,但不在 StartCalendarInterval 上运行

我有一个非常简单的 Launch Daemon,com.daily.vocab.plist,它只运行一个基本脚本。它应该在每天的某个时间运行(使用 StartCalendarInterval),但我无法做到这一点。网上很多帖子都说它会运行一两分钟,但对我来说它永远不会运行。

我在测试时将运行时间设置为未来 5 分钟,现在将其设置为在每分钟的第 0 秒运行,这样我就可以让它工作。一旦它开始工作,我会将其设置为我想要的每日运行时间。

按照本教程的建议,它保存在 /Library/LaunchDaemons 中。我手动加载它launchctl load /Library/LaunchDaemons/com.daily.vocab.plist。事实上,我确实看到它在我运行时已加载launchctl list。当我手动告诉它运行时launchctl start com.daily.vocab,它会按预期立即工作。唯一的问题是 StartCalendarInterval 似乎被忽略了。我在我的 Macbook 上参加 Mavericks。

这是文件:com.daily.vocab.plist

理想情况下,我相信我希望它每天早上 7:15 运行,从而使该StartCalendarInterval部分改为:

如果您甚至可以分享一个您必须使用 StartCalendarInterval 工作的 LaunchDaemon 示例以及您为使其工作而采取的每一步(例如 running launchctl load x.x.x.plist),那将非常有帮助!

解决方案:这个本地守护进程实际上应该是一个用户代理,所以它需要保存在 ~/Library/LaunchAgents 目录中并从其加载。从那里,我还需要卸载代理并重新加载代理。

注意:在您卸载/加载之前,守护程序/代理不会在 launchd 中自动更新。您不能只保存更新的 .plist 并期望它工作!