是否可以知道加载到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启动和登录时查找文件的目录.它可能找不到所有内容,因为作业可以由用户和/或其他进程手动加载.
从macOS 10.12.6开始(不确定早期版本),可以调用:launchctl dumpstate并且您将获得有关所有正在运行的进程的大量信息。
寻找<LABEL> = {与该工作有关的第一行信息
这是一个衬套,用于获取所有活动的守护程序及其plist路径:
grep -B 1 -A 1 "active count = 1$" <<< "$(launchctl dumpstate)"
这个问题可能没有答案!似乎并不是所有内容launchctl list都会有 plist 文件。
如前所述,launchctl dumpstate将为您提供大量有关内容的信息,包括 plist 路径(如果存在)。
您可以运行此命令来大致查看正在运行的所有内容及其 plist 路径的列表。
\n\nlaunchctl dumpstate | grep -A4 " = {" | grep -B 3 -A 3 -E "active count = [1-9]"\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n幸运的是,这种做法不太流行,因此搜索标准位置通常就足够了。
\n\n但这还不是最棘手的事情。我不知道具体细节,但似乎launchctl根本不需要相应的 plist 文件就可以加载服务。例如,这是 dumpstate 对 1Password 帮助程序守护进程的说法。
\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\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道“由 smd 提交”的真正含义是什么,但归根结底,即使我看到一个助手,launchctl list文件系统上也可能没有任何 plist。因此,我不知道如何使用launchctl unload此服务,因为卸载需要 plist 路径!由于此进程是由 管理的launchd,即使我pkill -9 onepassword7-helper看到launchd该进程停止并再次启动它。
(幸运的是,对于这个特定的 1Password 示例,如果您按住^并\xe2\x8c\xa5单击“退出 1Password”时,将会出现一个特殊的“完全完全使用 1Password”选项)
在最新版本的 macOS 中,您可以使用该launchctl print命令。您必须知道它在哪个域下运行,例如system或gui/<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 个文件
| 归档时间: |
|
| 查看次数: |
12413 次 |
| 最近记录: |