如何在 Mac OS X 上使用启动代理定期运行 shell 命令?

如何在 Mac OS X 上使用启动代理定期运行 shell 命令?

我们公司有 Kerberos 单点登录系统。这意味着我只需kinit user@DOMAIN在终端中输入,就可以访问所有 IT 资源,如文件服务器、内部 wiki、svn 服务器等。

问题是,我只能保持登录状态 10 个小时,所以我需要在kinit每天早上将计算机从睡眠状态唤醒时以及每次重新启动计算机时运行它。

有没有办法在我启动计算机时自动运行此命令,然后每隔十小时运行一次?

我做了一些研究,我认为正确的方法是使用启动代理,因为该命令必须以当前用户身份运行(kinit 需要钥匙串中的密码)。

我尝试使用以下启动代理文件,但它没有按预期工作:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>net.jabakobob.auto-kinit</string>
    <key>OnDemand</key>
    <true/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>user</string>
    <key>Program</key>
    <string>/usr/bin/kinit</string>
    <key>ProgramArguments</key>
    <array>
        <string>user@DOMAIN</string>
    </array>
    <key>StartInterval</key>
    <integer>10800</integer>
</dict>
</plist>

我不知道为什么这个启动代理不起作用,也不知道如何调试它。有什么想法吗?

答案1

/Library/LaunchAgents/与单个用户绑定,而与/Library/LaunchDaemons/整个机器绑定。系统启动并运行内核后,/Library/LaunchDaemons/首先加载在中找到的属性列表文件,因为它们是系统级守护进程。

尝试放入您的 plist/Library/LaunchDaemons/并查看它是否有效。因为目标是kinit在启动时运行,所以它是否在系统级加载并不重要。

如果它不起作用,请在此回复您的发现。

相关内容