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

时间:2016-11-02 20:18:35

标签: macos shell restart launchd launch-daemon

我有一个简单的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文件会被卸载?

1 个答案:

答案 0 :(得分:0)

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

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