LaunchDaemon无法启动脚本

时间:2019-08-15 18:20:38

标签: bash macos launchd

我正在设置一个启动守护程序,以运行脚本来检查是否登录了特定的本地帐户。如果该帐户已登录,则需要再次自动注销。我有一个有效的脚本,但是无法获取启动代理或启动守护程序来运行它。

我已经将它作为启动代理进行了尝试,但这没有用,并且特定用户被禁止运行脚本。它在macOS 10.14.5上运行。当由MDM启动时,它有时可以工作,但是即使MDM无法访问(因此是本地脚本),我们也需要它运行。

到目前为止,这是我的经纪人:

<?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>fubar.plist</string>
    <key>ProgramArguments</key>
    <array>
        <string>/location/of/fubar.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>30</integer>
</dict>
</plist>

这是脚本:

currentUser=$( scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ && ! /loginwindow/ { print $3 }' )

if [ "$currentUser" == "fubarUser" ]; then
  echo "$currentUser is fubarUser. Logging out"
  killall loginwindow
fi

我希望它注册fubarUser已登录,然后回显我的消息并杀死loginwindow,从而注销它们。

如果我在终端窗口中以root的身份运行脚本,则它可以正确识别登录者。因此,我知道脚本本身可以工作。我只是无法获得launchagent或launchdaemon来加载它。

在我的生产版本中,它实际上是回显它所登录的日志文件,并正确注册了当前用户。

1 个答案:

答案 0 :(得分:0)

原来是权限问题。我们显然已锁定了托管脚本的文件夹的权限。此后,我将其移至/Library/Scripts/文件夹中,并能够从那里平稳地运行它。

相关问题