3

我有一个简单的launchd plist 文件,用于运行旨在重新启动计算机的shell 脚本:

<?xml vesion="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.sag95.restartscript</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/sag95/Desktop/Scripts/restartscript.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>300</integer>
</dict>
</plist>

脚本文件为单行强制重启命令(真实文件中的密码,此处不放):

echo <password> | sudo -S shutdown -r now

一旦我使用加载 plist 文件

launchctl load com.sag95.restartscript.plist

它出现在列表中(launchctl 列表)。目前我有 plist 文件每 5 分钟运行一次脚本。加载 5 分钟后,第一次调用脚本并随后重新启动计算机。登录后,launchd plist 文件不再在列表中(launchctl 列表)。我等了 30 分钟,但它没有再次运行以重新启动我的计算机。

我的问题是为什么 com.sag95.restartscript plist 文件在重启/强制重启后卸载?

4

1 回答 1

4

launchctl load只为当前会话加载它。下次登录时,它会从/System/Library/LaunchAgents/*.plist/Library/LaunchAgents/*.plist和加载您的启动代理列表/Users/sag95/Library/LaunchAgents/*.plist。如果文件不在这些文件夹之一中,则不会加载。

假设您希望它仅在登录时运行,请将文件放在/Users/sag95/Library/LaunchAgents. 如果您希望它为任何登录用户运行,请将其放入/Library/LaunchAgents(但使用此特定脚本,密码仅适用于您的帐户,因此这没有用)。

于 2016-11-03T05:11:11.833 回答