计算机重新启动时启动的任务卸载

Launchd task unloads when computer restarts

我有一个简单的 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 列表)。目前,我每 5 分钟就有一个 运行 脚本的 plist 文件。加载 5 分钟后,第一次调用脚本并随后重新启动计算机。登录后,launchd plist 文件不再在列表中(launchctl 列表)。我等了 30 分钟,它还没有 运行 再次重新启动我的计算机。

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

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

假设您希望它仅在 登录时才 运行,请将文件放在 /Users/sag95/Library/LaunchAgents 中。如果您希望它为任何已登录用户设置 运行,请改为将其设置为 /Library/LaunchAgents(但使用此特定脚本,密码将仅对您的帐户有效,因此这不会有用)。