启动代理每10秒运行一次脚本

时间:2016-11-01 19:05:20

标签: bash launchd

我有一个启动代理,只要连接了USB设备,它就会运行bash脚本。我希望它只运行一次,但是当我连接设备时,脚本每10秒运行一次。

这是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 >
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.program</string>
    <key>Program</key>
    <string>/Users/Peter/Desktop/test1.sh</string>
    <key>LaunchEvents</key>
    <dict>
      <key>com.apple.iokit.matching</key>
        <dict>
          <key>com.apple.device-attach</key>
            <dict>
              <key>idProduct</key>
              <integer>1476</integer>
              <key>idVendor</key>
              <integer>1356</integer>
              <key>IOProviderClass</key>
              <string>IOUSBDevice</string>
              <key>IOMatchLaunchStream</key>
              <true/>
            </dict>
        </dict>
    </dict>
</dict>
</plist>

这是脚本:

#!/bin/bash
open -a "Spotify";
sleep 11;

我添加了睡眠11,因为我读到脚本需要运行至少10秒才能让launchd认为它完成了它的任务。然而,这没有任何帮助。

在终端运行中launchctl list com.example.program给出:

"LimitLoadToSessionType" = "Aqua";
"Label" = "com.example.program";
"TimeOut" = 30;
"OnDemand" = true;
"LastExitStatus" = 0;
"Program" = "/Users/Peter/Desktop/test1.sh";

1 个答案:

答案 0 :(得分:0)

默认情况下,launchd在满足启动条件时启动程序,然后在退出或崩溃时重新启动它们。要防止它重新启动脚本,只需将<key>KeepAlive</key><false/>添加到.plist(然后卸载并重新加载)。可能还需要添加<key>AbandonProcessGroup</key><true/>以防止launchd杀死“剩余”Spotify进程(尽管我认为没有这个可以工作)。