gpt4 book ai didi

linux - 从同步任务(launchdaemon)中卸载 LaunchAgent

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:51 28 4
gpt4 key购买 nike

我已经在 macOS 中运行守护进程服务。根据外部事件,它使用 launchctl load

从另一个 launchDaemon plist 运行脚本

这里是这个服务的 plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.my.uninstall</string>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/Library/myprod/uninstall.sh</string>
</array>
<key>StartInterval</key>
<integer>5</integer>
</dict>
</plist>

在脚本本身中,我希望卸载 launchAgent 服务的每个用户的所有实例(此服务有每个用户的进程)。卸载命令如下所示:

#!/bin/sh

for current_user in `/usr/bin/users`;
do
sudo -u $current_user /bin/launchctl unload /Library/LaunchAgents/com.myprod.agent.plist
done

但是这个命令没有成功,服务仍然存在。但是从 shell 命令行手动执行此操作,效果很好。

为了调试问题,我检查了日志并跟踪了工作和非工作命令生成:

工作:

sudo:     root : TTY=unknown ; PWD=/ ; USER=myself ; COMMAND=/bin/launchctl unload /Library/LaunchAgents/com.myprod.agent.plist

无工作:

sudo:     root : TTY=ttys004 ; PWD=/Users/myself/Desktop ; USER=myself ; COMMAND=/bin/launchctl unload /Library/LaunchAgents/com.myprod.agent.plist

我假设该命令应该成功,因为这两种情况下的脚本都以 root 身份运行。唯一的区别在于 tty 的上下文和值,我不明白它是什么。

知道为什么吗?

最佳答案

尝试将 -F 选项与 launchctl 一起使用:

sudo launchctl unload -F /Library/LaunchAgents/...

-F Force the loading or unloading of the plist. Ignore the Disabled key.

如果你不使用 -F 那么你可能首先需要禁用加载的守护进程,然后卸载它。

关于linux - 从同步任务(launchdaemon)中卸载 LaunchAgent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985875/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com