7

私はlaunchdを使い始めており、Mac miniサーバー(Snow Leopardサーバーを使用)にSDカードを挿入するたびにシェルスクリプトを実行するようにplistファイルを設定したいと考えています(すべてのjpgファイルをコピーする必要があります) 、名前を変更するなど)。

そこで、~/Library/LaunchAgents に plist ファイルを作成し (その内容については以下を参照してください - /Volumes への変更を探す必要があります)、「ビープ音」と言うシェルスクリプトを作成しました - 後でもっと便利なことをします.

plist ファイルは launchctl に登録されており、それを実行すると (launchctl start com.peters.runwhenSDmount)、コンピューターはメモリ カードが差し込まれるたびにビープ音を発し、メモリ カードが挿入されていないときは無音のままです。そのため、明らかに plist はシェル スクリプトを呼び出し、その後、特定の 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>

シェルスクリプト: ~/Library/Scripts/runwhenSDmount

#!/bin/bash
if [ -d "/Volumes/NIKON D40X" ]; then
    say beep
fi
4

3 に答える 3

8

~/Library/LaunchAgentsでサービスを自動的に起動することで同様の問題が発生しましたが、私の場合、 *.plist で定義されたサービスはどれも開始されませんでした。

問題は明らかにディレクトリ~/Library/LaunchAgentsに関連しており、plist ファイル自体には関連していませんでした。解決策は、ファイルのアクセス許可をリセットすることでした。

chmod 700 ~/Library/LaunchAgents.

自作ユーザー向けの更新: (2015-02-23)

昨日、launchd でサービスを管理するための Mac PreferencePane であるLaunchRocketを見つけました。これは自作に対応しており、launchd 自作サービスを管理するための優れた UI が追加されています。

これは、不適切なユーザー権限の場合には役に立たないかもしれませんが、オープン ソースであるため、プロジェクトをフォークして権限チェックを機能として追加できます。

于 2012-05-14T08:54:45.623 に答える
8

~/Library/LaunchAgents フォルダーに新しい plist を作成したら、そのことを launchd アプリケーションに伝える必要があります。そのための 2 つの基本的な方法は次のとおりです。

  1. ログアウトしてから再度ログインします。 - ログインするたびに、launchd は ~/Library/LaunchAgents フォルダーの内容をスキャンし、そこで見つかった plist を追加します。

  2. 「launchctl」を使用して端末コマンド ラインから plist をロードします。コマンドの構文は次のとおりです。

    launchctl load {Path-to-plist}
    

launchctl コマンドを使用して、launchd による plist の使用を停止することもできます。これを行うには、次を使用します。

launchctl unload {Path-to-plist}

launchctl コマンドは、変更間のアンロード/ロードを迅速かつ簡単にするため、plist を開発するときに非常に便利です。plist が思いどおりに動作するようになると、自動ログイン launchd の読み込みが引き継がれます。

于 2011-07-31T02:15:23.093 に答える
2

launchd アイテムの作成と管理に役立つ 2 つのツールは次のとおりです。

  1. LaunchControl - " LaunchControl は完全な機能を備えた launchd(8) フロントエンドで、Mac でシステムおよびユーザー サービスを作成、管理、およびデバッグできます。 "
  2. Lingon - 「Mac で自動的に実行する、使いやすく強力なユーティリティ

注: Brett Terpstra ( nvAltなどの素晴らしい Mac 作業を数多く行っている) は最近、彼の投稿「notifyutil と launchd を使用してリモートでタスクをトリガーする」で、Lingon を使用していましたが、最近は LaunchControl を使用しているとコメントしました。どちらも検討する価値があります。

于 2013-03-10T21:33:36.330 に答える