问题标签 [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.
macos - 如何让 Launchd 更改 /etc/hosts 并重置 DNS 缓存?
我一直在尝试设置 Launchd 以阻止 osX 10.11.6 上的多个网站
该脚本似乎没有在预定时间内执行。
奇怪的是,launchd 似乎在我加载 plist 时执行命令,但在预定时间内不执行命令。/etc/hosts 已更新为要阻止的站点,但网站未被阻止。
奇怪的是,launchd 似乎在我加载 plist 时执行命令,但在预定时间内不执行命令。
一些谷歌搜索建议我可能需要重置 DNS 缓存:
当我从命令行运行它时,我仍然可以访问应该被阻止的站点。如果要工作,我也不知道如何将其添加到已启动的 plist 程序参数中。
$ cat /Library/LaunchDaemons/local.hosts.blockingAM.plist
以下是权限:
$ ls -la /Library/LaunchDaemons/local.hosts.blockingAM.plist
我加载了 plist:
没有记录错误:
$ cat /tmp/local.hosts.blocking.err
这是包含被阻止站点的文件:
$ cat /etc/hosts_BLOCKED_sites.txt
我究竟做错了什么?
macos - RabbitMQ 没有开始使用 launchd
我使用 MacPorts 生态系统,该rabbitmq-server
端口真的很旧,并且不再工作了。所以我已经安装rabbitmq-server
在 Mac OS X Sierra 上,使用Generic Unix release。有用。
RabbitMQ 安装在 . 下/usr/local/rabbitmq_server-3.6.5/
,所有可执行文件都有符号链接/usr/local/sbin/
。
当我运行 RabbitMQ 服务器时,一切正常:
为了自动启动守护程序com.rabbitmq.rabbitmq-server.plist
,我创建了一个放在/usr/local/etc/LaunchDaemons
. 我还在/Library/LaunchDaemons
. 所有者是root
,组是wheel
。
这是plist文件内容:
当我尝试使用加载 plist 文件时
我没有收到任何错误,但守护程序没有启动。我什至尝试将调试信息添加到 plist,但日志没有显示任何错误。我究竟做错了什么?
macos - LaunchDaemon 每 10 秒运行一次 - OSX
我想做的是检测iphone何时连接到Macbook Air(10.11.6),以及何时需要检索设备的UDID。为此,我创建了一个在插入新 USB 时触发脚本的守护程序:
这会触发此脚本:
该脚本检索 de UDID,但我的问题是它永远不会停止,它每 10 秒运行一次:
谁能帮我解决这个问题?我需要的是脚本只为每个与 USB 端口的连接运行一次。
macos - 当用户删除它时卸载 .app 安装的项目,包括 SMJobBless 助手
SMJobBless()
简短版本:删除应用程序时是否可以删除应用程序(等)设置的帮助工具?如果是这样,怎么做?
长版:
不幸的是,我们正在开发的 Mac 应用程序需要管理员权限才能执行偶尔的操作,并且即使应用程序本身没有运行,它也需要后台任务才能连接到其他应用程序的插件(这个可以是非特权的) . 该应用程序将使用 Developer ID 证书进行签名,并且仅在 App Store 之外分发。
我们希望该应用程序尽可能成为“好公民”,即使在卸载时也是如此。
对于后台任务,我们使用了一个登录项,使用SMLoginItemSetEnabled()
. 这并不令人惊讶,因为 XPC 消息传递似乎不起作用(我们正在使用CFMessagePort
- 欢迎替代建议),但如果用户删除应用程序,登录项至少在下次登录时不再加载。我怀疑系统中的某个地方仍然存在它的痕迹,但是使用了 .app 包中的可执行文件,当它消失时,登录项不再运行。
对于偶尔需要管理员权限的操作,我们有一个特权帮助工具,我们的应用程序使用它安装SMJobBless()
,它实现了一个命名的 XPC 服务,因此当它收到来自主应用程序的消息时,任务会按需启动。这是 Apple 在其Even Better Authorization Sample中推荐和描述的内容。
助手可执行文件被复制到/Library/PrivilegedHelperTools/
by SMJobBless()
,嵌入的 launchd.plist 最终在/Library/LaunchDaemons/
. 即使操作系统有关于哪个应用程序“拥有”助手的信息,但当用户删除应用程序时,它似乎并没有卸载它。Apple 的示例对卸载保持沉默,除了uninstall.sh
显然仅打算在开发期间使用的脚本。当应用程序没有运行时,我们不需要这个帮助程序,所以将它安装为一个成熟的启动守护进程有点过分,但我们也想避免重复地用密码提示来烦扰用户。此外,Apple 建议不要使用其他形式的具有管理员权限的运行代码,SMJobBless()
例如SMJobSubmit()
标记为已弃用。
那么我们如何清理自己呢?
我找到SMJobRemove()
了,但是(a)在我们的情况下,我们什么时候会调用它 - 你不能在 .app 包删除时运行代码,或者你可以吗?(b)它实际上似乎并没有清理干净。
我能想到的唯一两件事并不是非常令人满意:
- 某种卸载程序或脚本。但这似乎也很丑陋。
- 不用担心,当用户删除我们的应用程序时留下一团糟。
macos - 计算机重新启动时卸载已启动的任务
我有一个简单的launchd plist 文件,用于运行旨在重新启动计算机的shell 脚本:
脚本文件为单行强制重启命令(真实文件中的密码,此处不放):
一旦我使用加载 plist 文件
它出现在列表中(launchctl 列表)。目前我有 plist 文件每 5 分钟运行一次脚本。加载 5 分钟后,第一次调用脚本并随后重新启动计算机。登录后,launchd plist 文件不再在列表中(launchctl 列表)。我等了 30 分钟,但它没有再次运行以重新启动我的计算机。
我的问题是为什么 com.sag95.restartscript plist 文件在重启/强制重启后卸载?
macos - Mac Launch Daemon 保存后无法从系统钥匙串中检索密码
我们有一个启动守护程序,它(出于各种原因必然)以 root 身份运行,并通过网络与服务器组件通信。它需要通过服务进行身份验证,因此当它首次获取密码时,我们将其保存到系统钥匙串中。在随后的启动中,想法是从钥匙串中检索密码并使用它与网络服务进行身份验证。
这一直运行良好,但在 macOS 10.12 上,现有代码停止工作,我们完全不知道如何解决这个问题。归结为:
无论我们是保存新密码还是检索旧密码,我们都使用以下方法获取对系统钥匙串的引用:
我们还禁用了用户交互,尽管我们希望它在守护进程的上下文中已经关闭。
将新密码保存到钥匙串时,我们使用
这很管用。报成功,可以在Keychain Access.app的“system”keychain中看到item。
在我们的守护进程的后续运行中检索它是通过以下行完成的:
errSecAuthFailed
不幸的是,由于我们不清楚的原因,这已经开始回归。
我们检查了一些额外的细节和我们尝试过的事情,但无济于事:
- 守护程序二进制文件使用 Developer Id 证书进行签名。
- 守护程序二进制文件包含一个嵌入的 Info.plist 部分,其中包含捆绑 ID 和版本。
- 我可以在 Keychain Access.app 中密码项的“访问控制”选项卡中的“始终允许这些应用程序访问”列表中看到守护程序二进制文件。
- 如果我在钥匙串访问中手动切换到“允许所有应用程序访问此项目”,它就可以工作。然而,这在某种程度上违背了将密码保存在钥匙串中的意义。
- 我们尝试过使用 to 的参数
SecKeychainAddInternetPassword
,但这似乎没有任何区别。 - 我们已经尝试使用 显式解锁钥匙串
SecKeychainUnlock()
,但正如文档所示,这似乎是多余的。 - 如您所料,删除
Keychain Access.app
导致SecKeychainFindInternetPassword()
yield中的项目。errSecItemNotFound
所以它肯定可以找到保存的项目,只是不允许读取它。
钥匙串文档不是很容易阅读,而且部分内容是重言式的。(“为了做 Y,你需要做 Y”,而没有提到你为什么想做 Y。)不过,我认为我已经完成并理解了其中的大部分内容。没有详细介绍我们特定设置的各个方面(从守护程序访问),但很明显,访问以前由同一应用程序保存的项目不需要任何特殊授权或身份验证。这与我们所看到的行为直接矛盾。
有任何想法吗?
macos - Mac OS X 上的后台服务
我想制作一个 OS X 应用程序,它在某个时间间隔内连续捕获照片并通过任何服务(HTTP/Socket)将该照片发送到服务器。
我对此进行了搜索并获得了相同的效果,我需要为 mac 制作一个将在后台运行的守护程序服务(使用 launchd)。
但我仍然对程序感到困惑。
例如,我创建了一个 plist 文件
我将 plist 文件复制到 ~/Library/LaunchAgents
然后使用命令
但我现在没有得到任何输出。
对于照片捕获,我使用 imagesnap (引用):
如何在后台实现照片捕获和服务(HTTP/Socket)实现?
如何在后台将照片发送到服务器?
需要帮忙。
macos - 使用 imagesnap 命令 Cocoa 应用程序捕获图像
我正在使用“ imagesnap ”命令(通过 shell 脚本)在后台使用 launchd 从我的 OS X 应用程序中的网络摄像头捕获图像。
文件名:CaptureCameraPic
我的 plist (test.plist) 看起来像
我将脚本和 plist 文件都保存在应用程序包路径中。
在我的 os x 应用程序中,单击登录按钮时,我将 plist 复制到/Library/LaunchDaemons/。
该脚本开始运行(使用launchctl load path_to_plist_in_LaunchDaemon_folder)(我可以在输出文件中看到日志打印,例如文件夹创建等)。
但是对于“imagesnap”,它会抛出错误
但是当我在终端上运行这个脚本时
它工作正常。
请需要帮助。
bash - 以用户身份运行 mac os x 应用程序不会自行停止
我正在创建一个 macOS 安装程序包。
为此,我使用了一个安装后脚本文件,该文件启动一个应用程序,然后加载一个 LaunchDaemon plist。
这是安装后脚本:
结果是它使用sudo -u $USER_NAME /usr/local/TestApp/Test.app/Contents/MacOS/Test -l
命令启动应用程序,然后阻塞,因为应用程序一直在运行。
因此,脚本卡住了,LaunchDaemon 永远不会加载。
请让我知道我能做些什么以防万一。
macos - 应用程序在系统重新启动时不启动
我创建了一个运行应用程序的 LaunchDaemon 服务
这是我的com.testapp.plist:
它工作正常。但是当我重新启动系统时,launchdaemon 会启动我的应用程序,但它会终止应用程序。
我在控制台中得到的日志是,
我还从 Activity Monitor 检查了应用程序的运行状态,显示应用程序正在运行。
还通过以下方式检查了守护进程状态
这也表明守护进程也在运行。
此外,下面是来自守护进程 plist 的标准输出日志(它记录了我在应用程序中所做的日志):
我无法得到这个问题的主要原因。
请帮忙。
提前致谢。