〜/ Library/LaunchAgents plist手动运行但不自动运行

use*_*071 5 launchd

我开始使用launchd并且想要设置一个plist文件,这样每当我将SD卡插入我的Mac mini服务器(使用Snow Leopard Server)时,我想要一个shell脚本运行(应该复制所有的jpg文件) ,重命名他们等).

所以,我在〜/ Library/LaunchAgents中创建了一个plist文件(请参阅下面的内容 - 它应该寻找/ Volumes的更改)并创建了一个shell脚本,上面写着"beep" - 稍后它会做一些更有用的事情.

plist文件与launchctl注册,当我运行它(launchctl开始com.peters.runwhenSDmount),电脑说,每当一个存储卡已插入哔声,在没有存储卡的保持沉默.因此,plist确实调用了shell脚本,随后检查特定的SD卡是否存在.我认为这也证明了SD卡的权限没有问题.

但是,它似乎并不自行运行??? 知道为什么??


plist文件:〜/ Library/LaunchAgents/com.peters.runwhenSDmount.plist

<?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">
<dict>
    <key>Label</key>
    <string>com.peters.runwhenSDmount</string>
    <key>LowPriorityIO</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
    <string>/Users/peter/Library/Scripts/runwhenSDmount</string>
    </array>
    <key>ThrottleInterval</key>
    <integer>10</integer>
    <key>WatchPaths</key>
    <array>
    <string>/Volumes</string>
    </array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

shell脚本:〜/ Library/Scripts/runwhenSDmount

#!/bin/bash
if [ -d "/Volumes/NIKON D40X" ]; then
    say beep
fi
Run Code Online (Sandbox Code Playgroud)

Ala*_*ith 7

在〜/ Library/LaunchAgents文件夹中创建新的plist后,您必须告诉launchd应用程序.这样做的两个基本方法是:

  1. 注销然后重新登录. - 每次登录时,launchd都会扫描〜/ Library/LaunchAgents文件夹的内容,并添加它在那里找到的任何plist.

  2. 使用"launchctl"从终端命令行加载plist.该命令的语法是:

    launchctl load {Path-to-plist}
    
    Run Code Online (Sandbox Code Playgroud)

launchctl命令也可用于停止使用plist启动.为此,请使用:

launchctl unload {Path-to-plist}
Run Code Online (Sandbox Code Playgroud)

在开发plist时,launchctl命令非常有用,因为它可以快速轻松地在更改之间卸载/加载它们.一旦你有一个plist以你喜欢的方式工作,自动登录启动加载就可以接管.


Gre*_*und 7

我在〜/ Library/LaunchAgents中自动启动服务时遇到了类似的问题,但在我的情况下,*.plist定义服务的NONE已启动.

问题显然是连接到目录〜/ Library/LaunchAgents而不是plist文件本身.解决方案是重置文件权限.

chmod 700 ~/Library/LaunchAgents.

自制用户更新:(2015-02-23)

昨天我刚刚发现了LaunchRocket,这是一个用于使用launchd管理服务的Mac PreferencePane.它是自制的,并且为管理启动的自制服务添加了一个很好的UI.

这可能无法帮助您使用不正确的用户权限,但它是开源的,因此您可以分叉项目并将权限检查添加为功能.