问题标签 [launchctl]

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 投票
1 回答
553 浏览

bash - 如何从 launchctl 获取文件

我正在尝试sourcelaunch agent. 我知道单个变量很容易setenv,但是我需要引入一堆变量,所以source这就是我所需要的。

这似乎没有任何问题加载和启动:

但是当我printenv没有出现我的源环境变量时。如果手动我这样做:

然后所有的变量都出现了。为什么launchctl代理似乎没有将变量加载到我的环境中?

0 投票
1 回答
101 浏览

macos - 无法在 Mac 上的系统启动时运行 shell 脚本?

我想在 mac 启动时运行一个 shell 脚本。为此,我创建了一个 shell 脚本和 plist 文件。我已将 plist 复制到 ~/Library/LaunchAgents/com.example.exampld.plist. 它具有所有必需的权限。

我已经使用下面的 commond 加载了它

并且还使用了测试

但是没有执行 shell 脚本代码我可以这样说,因为我的 shell 脚本启动了一个 go build 并打开浏览器,如下所示,但没有任何反应。

0 投票
1 回答
796 浏览

macos - 如何使用 launchctl 重新加载对 plist 的更改?

在 MaxOS 上,我创建了 ~/Library/LaunchAgents/x.plist。然后我用“launchctl load ...”加载它

我做了一些编辑,卸载并重新加载它。当我键入“launchctl list x”时,它不会将我的任何 mod 显示到 plist 文件中。

如何让 launchctl 加载我的新更改?即使在我卸载它之后,它如何记住这个文件的第一个版本?它使用缓存吗?

0 投票
1 回答
512 浏览

macos - 如何将已经运行的二进制文件设置为在启动时运行

我有一个 Go 程序,它应该作为一个守护进程运行,为用户提供最少的前端(只是系统托盘中的一个图标。)

它是用 Go 编写的这一事实并不重要,我遇到的主要问题是让一个二进制文件(已经在运行)在 Mac 上启动时运行。

我可以将二进制文件设置为在启动时运行,如下所示:

cp将 plist 放入 LaunchAgents 目录)

(然后用 . 加载 plist launchctl。)

这很好用。唯一的问题是launchctl load 它启动了另一个已经运行的二进制实例。我希望能够在启动时为正在运行的二进制文件启用(和禁用)运行二进制文件,而无需启动它的另一个实例。

.plist如果你想看的话,这里是文件:

0 投票
0 回答
990 浏览

python - 如何修复 Python 脚本的 launchctl 状态码 78?

我正在尝试使用 PRAW API 来托管一个机器人,用于将每日 Wikipedia 线程发布到 /r/Wikipedaily,我想我会使用 launchd/launchctl 来安排帖子每 24 小时运行一次。脚本启动(它是一个正在运行的 launchctl 进程),但它始终具有状态代码 78 以表示某些错误。

我尝试将 plist 文件放在 LaunchAgents 和 LaunchDaemons 中,使用 sudo 启动它,在脚本和 launchd 文件中指定 Python env 的路径,所有 3 都导致相同的错误代码。我认为这不是 Python 脚本本身的问题,因为从命令行手动运行它似乎工作正常。

我的直觉是问题出在 plist 文件本身,与 Python 环境规范或文件/目录的权限有关。我通过 chmod +x 授予了 Python 脚本权限,但这可能还不够。

这是 plist 文件(出于调试目的,StartInterval 设置为 60 而不是 86400,无论如何都不起作用):

com.nathansbud.wikipedaily.plist:

从命令行运行它,Reddit 帖子工作得很好,但是让 launchd 执行脚本失败,并在控制台中显示以下错误消息:

  • 服务无法初始化:18C54:xpcproxy + 11287 [1534][EB0A8C9B-6A9A-3296-B905-73527C966685]:0xd

  • 服务退出异常代码:78

它至少每分钟运行一次(根据控制台输出),但不幸的是,78 似乎是通用错误代码,对我来说并没有太多说明,而且我不确定 xpcproxy 线的含义。

对此有任何帮助将不胜感激!提前致谢!

0 投票
2 回答
4999 浏览

macos - 列出 macOS 上所有已加载/已卸载或同时启动的代理

我正在尝试使用以下命令确定现在加载了多少启动代理

但它没有列出我要找的那个。这是对的吗?

0 投票
0 回答
49 浏览

macos - .plist 不保持进程活着

我正在尝试在 Mac 服务器上设置 FreeRADIUS。我的 RADIUS 服务器工作正常,唯一的问题是当系统重新启动时我无法让它保持活动状态。以下是我在 /Library/LaunchDaemons/org.freeradius.radiusd.plist 中的一个 plist:

重新启动后,然后使用以下命令

服务器启动正常,没有任何问题,并且它保持活动状态。

我查看了 /tmp/mycommand.out 中的输出(.err 为空),最后几行是:

所以它似乎可以启动了。

我还检查了 plist 上的权限,它们如下

有任何想法吗?

0 投票
1 回答
1653 浏览

scripting - Mac 守护程序未运行但存在于 launchctl 列表中

这是我第一次尝试创建守护进程,所以如果我说一些菜鸟的话,请耐心等待。

我使用 AppleScript 编写了一个测试脚本。最终,这将更加强大,并成为会议播音员和其他一些通知,以开始我的一天。这是现在的脚本:

这是列表:

在此处输入图像描述

我将它保存在 /Library/LaunchDaemons 作为 local.jeeves.plist。我通过目视找到它并运行来确认它在那里:

在此处输入图像描述

跑步

也证实了它的存在。

我确认该Program键引用的脚本在该目录中。它还可以运行,因为我可以从 AppleScript 运行它

在此处输入图像描述

回到 plist。我通过运行加载它:

终端没有产生任何错误。

如果我运行:

或者

没有结果。没有错误,但脚本没有运行。

所以我对我的 system.log 做了一些挖掘,发现了这些错误:

所以现在我知道了这个问题,或者是那种。这是目录问题的权限还是根本找不到目录?

0 投票
2 回答
617 浏览

macos - 如何在 Mojave/Catalina 下从后台(基于launchctl)进程录制音频?

首先,一些背景信息来解释我的动机:我有一个 Qt/C++/Objective-C++ 应用程序,它使用 CoreAudio/AVFoundation 从 Mac 上的指定音频输入接收传入音频,修改音频,然后播放修改后的音频通过一些指定的音频输出输出音频。这一切都很好,直到 Mojave 和 Catalina,此时 Apple 的新麦克风隐私限制导致它不再能够接收传入的音频(它只收到零/静音,因为缺乏明确的用户使用权限麦克风)。

为了解决这个问题,我添加了代码以跳过新的 get-the-user's-permission(即向 Info.plist 添加标签,添加对和的NSMicrophoneUsageDescription调用等),现在我的应用程序再次按预期工作从其图标启动(即它提出“MyAudioProcessingApp 想使用麦克风”请求程序,一旦用户响应,我的应用程序的复选框就会出现在“安全和隐私/隐私/麦克风”控制面板中,并控制是否不是我的应用程序可以收听传入的音频)。就目前而言,这一切都很好。authorizationStatusForMediaTyperequestAccessForMediaType

我的问题是——我的应用程序还有一个“后台模式”功能,用户可以要求应用程序将自身安装为非 GUI 系统服务(通过 launchd/launchctl 在启动时运行),这样它就会Mac 启动后立即在后台进行音频处理(即无需任何人登录或手动启动应用程序)。这对于想要在“无头/嵌入式”mac 上作为固定音频安装的一部分运行此应用程序的人来说非常有用,在这种情况下,任何人都需要做的就是打开 Mac 的电源,让它开始处理音频。

但是,我发现当我的应用程序以这种方式作为后台进程运行时,[AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]总是返回AVAuthorizationStatusDenied,即使用户之前已授予我的应用程序访问麦克风的权限。即使进程的有效用户 ID 与授予麦克风权限的用户相同,并且运行的可执行文件与先前生成用户同意的权限提示的文件相同,也会发生这种情况。

我的问题是,我需要一些特殊技巧才能在后台运行时访问麦克风吗?或者Apple是否决定launchctl-launched-daemons在任何情况下都无法访问麦克风,因此我不走运?

ps 我的应用程序的MyAudioProcessingApp.app/Contents/Info.plist文件和/Library/LaunchDaemons/com.mycompany.myprogram.plist文件(均轻微匿名)如下,以防它们相关:

0 投票
0 回答
139 浏览

macos - 删除应用程序时如何清理launchctl

我为 Mac 编写了一个应用程序,其中一个组件是在后台运行的 launchctl 代理。

由于通过拖动到垃圾箱来删除 Mac 应用程序(我可以理解这个逻辑,但在多年的 Windows 开发后习惯了),我想知道当用户删除应用程序时我可以做些什么来清理自己?

特别是正在运行的后台进程及其 .plist 文件。

编辑:在对这个问题进行了更多思考之后,我想在后台进程文件上放置一个监听器,如果它被删除就会收到通知,然后从 launchctl 中删除自己,删除 plist 并杀死自己。这行得通吗?