如何知道特定的launchd.plist文件位置?

Kur*_*uki 18 macos launchd

是否可以知道加载到launchctl命令中的.plist文件位置?

标签名称列在"launchctl list"中,其内容可以通过"launchctl list LABEL"查看,但我找不到.plist文件位置.

我知道它将位于/ Library/LaunchAgent或〜/ Library/LaunchAgent之类的东西,但我不希望在使用launchctl命令列出所有作业时搜索路径.

Ree*_*osa 14

这个问题出现了很多,不幸的是locate,mdfind两者都没有显示我系统上相应目录的结果.我把以下函数放入我的中,.bashrc这样我就可以快速搜索launchctl查找plist文件的目录.

launchctlFind () {
    LaunchctlPATHS=( \
        ~/Library/LaunchAgents \
        /Library/LaunchAgents \
        /Library/LaunchDaemons \
        /System/Library/LaunchAgents \
        /System/Library/LaunchDaemons \
    )

    for curPATH in "${LaunchctlPATHS[@]}"
    do
        grep -r "$curPATH" -e "$1"
    done
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这仅检查在launchctl启动和登录时查找文件的目录.它可能找不到所有内容,因为作业可以由用户和/或其他进程手动加载.


Joe*_*ner 7

从macOS 10.12.6开始(不确定早期版本),可以调用:launchctl dumpstate并且您将获得有关所有正在运行的进程的大量信息。

寻找<LABEL> = {与该工作有关的第一行信息

这是一个衬套,用于获取所有活动的守护程序及其plist路径:

grep -B 1 -A 1 "active count = 1$" <<< "$(launchctl dumpstate)"


Chr*_*ris 6

这个问题可能没有答案!似乎并不是所有内容launchctl list都会有 plist 文件。

\n\n

如前所述,launchctl dumpstate将为您提供大量有关内容的信息,包括 plist 路径(如果存在)。

\n\n

您可以运行此命令来大致查看正在运行的所有内容及其 plist 路径的列表。

\n\n
launchctl dumpstate | grep -A4 " = {" | grep -B 3 -A 3 -E "active count = [1-9]"\n
Run Code Online (Sandbox Code Playgroud)\n\n

(尽管这似乎还包括运行的其他程序,这些程序不是由 launchd 管理的守护进程?)

\n\n

代理/守护程序在其标识符下方将有一个路径字段。通常,路径指向里德的回答描述的标准 5 个位置中的 plist 文件。然而,事实并非如此。例如,Steam 从非标准位置加载 launchctl 服务。

\n\n
\xe2\x9e\x9c launchctl dumpstate | grep -A4 " = {" | grep -B 3 -A 3 -E "active count = [1-9]"  | grep valve\ncom.valvesoftware.steam.ipctool = {\n    path = /Users/chris/Library/Application Support/Steam/com.valvesoftware.steam.ipctool.plist\n
Run Code Online (Sandbox Code Playgroud)\n\n

幸运的是,这种做法不太流行,因此搜索标准位置通常就足够了。

\n\n

但这还不是最棘手的事情。我不知道具体细节,但似乎launchctl根本不需要相应的 plist 文件就可以加载服​​务。例如,这是 dumpstate 对 1Password 帮助程序守护进程的说法。

\n\n
\xe2\x9e\x9c launchctl dumpstate | grep -A4 " = {" | grep -B 3 -A 3 -E "active count = [1-9]"  | grep -A4 "onepassword7-helper = {"\n2BUA8C4S2C.com.agilebits.onepassword7-helper = {\n    active count = 5\n    path = (submitted by smd.1154)\n    state = running\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不知道“由 smd 提交”的真正含义是什么,但归根结底,即使我看到一个助手,launchctl list文件系统上也可能没有任何 plist。因此,我不知道如何使用launchctl unload此服务,因为卸载需要 plist 路径!由于此进程是由 管理的launchd,即使我pkill -9 onepassword7-helper看到launchd该进程停止并再次启动它。

\n\n

(幸运的是,对于这个特定的 1Password 示例,如果您按住^\xe2\x8c\xa5单击“退出 1Password”时,将会出现一个特殊的“完全完全使用 1Password”选项)

\n


Ell*_*t B 6

在最新版本的 macOS 中,您可以使用该launchctl print命令。您必须知道它在哪个域下运行,例如systemgui/<uid>。您可以在手册页中找到一些其他域,但到目前为止我只看到在这两个域下运行的服务。例子:

% launchctl print gui/$(id -u)/com.apple.cloudphotod  | grep path
    path = /System/Library/LaunchAgents/com.apple.cloudphotod.plist

 % launchctl print system/com.openssh.sshd | grep path 
    path = /System/Library/LaunchDaemons/ssh.plist
    stderr path = /dev/null
Run Code Online (Sandbox Code Playgroud)

我相信这个命令是在高山脉或附近地区实施的。


小智 4

中使用的进程名称launchctl list在 plist 中声明。虽然 plist 应位于上述位置,但它们几乎可以位于任何位置。

我用“locate”找到了我正在寻找的plist。我正在寻找 org.postgresql.postgres locate *.plist | grep org.postgresql.postgres 将其缩小到 4 个文件