Launch Agent 不会 运行 shell 脚本
Launch Agent will not run shell script
下面是我的plist:
<plist version="1.0">
<dict>
<key>EnableGlobbing</key>
<true/>
<key>Label</key>
<string>com.system.osx</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>~/Library/.system/connect.sh</string>
</array>
<key>KeepAlive</key>
<true/>
<key>ResetAtClose</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
在我 运行 加载 plist 之前,我总是:
一个。 chmod 777 ~/Library/.system/connect.sh
乙。 chmod 777 ~/Library/LaunchAgents/com.system.osx.plist
摄氏度。通过执行 sh ~/Library/.system/connect.sh
检查以确保我的脚本正常工作,并且它始终如此。
D. launchctl load ~/Library/LaunchAgents/com.system.osx.plist
加载 plist 后,shell 脚本不会 运行,正如您在 plist 中看到的那样,我已确保它首先 运行s /bin/sh .
非常感谢任何帮助,最近我的问题在这里被忽略了。
更新
我已将 ~/Library/.system/connect.sh
更改为 /Users/MyUser/Library/.system/connect.sh` 但它仍然没有 运行 宁 shell 脚本
您需要脚本的完整路径。
用户域launch agent默认权限为644
更新:同时使用键 KeepAlive
和 StartInterval
是有问题的。由于脚本应该每分钟 运行,删除 KeepAlive
键和值
如果您使用的是 OSX Yosemite (10.10) 或更高版本,您将无法再使用 ~/
引用您的主目录,即使您设置了 EnableGlobbing
至 <true/>
。参考:https://apple.stackexchange.com/a/153149/15940
我已经完成了这项工作所以我只能假设你的 plist 文件有错误或选项来阻止它 运行。这是我的有效 plist。
<?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>net.silicontrip.login</string>
<key>KeepAlive</key>
<false/>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>LoginWindow</string>
</array>
<key>Program</key>
<string>/bin/bash</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>/usr/local/bin/loginrc.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
这两者在 launchctl 加载或登录后立即起作用。
下面是我的plist:
<plist version="1.0">
<dict>
<key>EnableGlobbing</key>
<true/>
<key>Label</key>
<string>com.system.osx</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>~/Library/.system/connect.sh</string>
</array>
<key>KeepAlive</key>
<true/>
<key>ResetAtClose</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
在我 运行 加载 plist 之前,我总是:
一个。 chmod 777 ~/Library/.system/connect.sh
乙。 chmod 777 ~/Library/LaunchAgents/com.system.osx.plist
摄氏度。通过执行 sh ~/Library/.system/connect.sh
检查以确保我的脚本正常工作,并且它始终如此。
D. launchctl load ~/Library/LaunchAgents/com.system.osx.plist
加载 plist 后,shell 脚本不会 运行,正如您在 plist 中看到的那样,我已确保它首先 运行s /bin/sh .
非常感谢任何帮助,最近我的问题在这里被忽略了。
更新
我已将 ~/Library/.system/connect.sh
更改为 /Users/MyUser/Library/.system/connect.sh` 但它仍然没有 运行 宁 shell 脚本
您需要脚本的完整路径。 用户域launch agent默认权限为644
更新:同时使用键 KeepAlive
和 StartInterval
是有问题的。由于脚本应该每分钟 运行,删除 KeepAlive
键和值
如果您使用的是 OSX Yosemite (10.10) 或更高版本,您将无法再使用 ~/
引用您的主目录,即使您设置了 EnableGlobbing
至 <true/>
。参考:https://apple.stackexchange.com/a/153149/15940
我已经完成了这项工作所以我只能假设你的 plist 文件有错误或选项来阻止它 运行。这是我的有效 plist。
<?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>net.silicontrip.login</string>
<key>KeepAlive</key>
<false/>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>LoginWindow</string>
</array>
<key>Program</key>
<string>/bin/bash</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>/usr/local/bin/loginrc.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
这两者在 launchctl 加载或登录后立即起作用。