launchd でエージェントを登録する方法

launchd でエージェントを登録する方法

launchctlOS X (Leopard) で定期的な起動をスケジュールできませんlaunchd。基本的に、Web 上で手順ごとの説明リストを見つけることができず、直感的なアプローチが機能しません。

ファイルsync.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>net.madrat.utils.sync</string>
        <key>Program</key>
        <string>rsync</string>
        <key>ProgramArguments</key>
        <array>
            <string>-ar</string>
            <string>/path/to/folder/</string>
            <string>/path/to/backup/</string>
        </array>
        <key>StartInterval</key>
        <integer>7200</integer>
    </dict>
</plist>

このスクリプトをパス内に配置しました~/Library/LaunchAgents

次に、私は登録済みスクリプトを使用する

launchctl load ~/Library/LaunchAgents/sync.plist

最後に、それが機能するかどうかをテストするために、開始仕事:

 launchctl start net.madrat.utils.sync

– 何も起こりませんでした。rsyncターミナルでコマンドを手動で実行すると、期待どおりの結果が得られます。

存在しないジョブを開始しようとするとエラーメッセージが表示されるので、ジョブが正しく登録されていると確信しています(しなかった上記のコマンドで get を実行します。

何を間違えたのでしょうか?

答え1

リンゴンlaunchd を管理するための優れた GUI ツールです。このプロジェクトは現在サポートされていないようですが、10.5.x では間違いなく動作します。

しかし、あなたの特定の問題に関しては...試してみましたか

sudo launchctl list 

これにより、.plist が正しく実行されているかどうかがわかります。デーモンが起動していない場合は 1 が返され、成功した場合は '0' が返されます。これを探してみてください。

「1」が表示される場合は通常、スクリプトを間違った場所に置いたか、タイプミスをしたか、権限を間違って設定したためです。

また、頻繁に再起動してください。

launchctl start

再起動が行われた場合には効果がない可能性があります。

また、あなたの質問を詳しく見てみると、rsync コードを bash スクリプトに入れて、そこに貼り付けてみてはいかがでしょうか/usr/bin/。そうすれば、そのファイルだけでchmod+x、.plist を簡素化して、いつでも好きなときにそのスクリプトを実行できるようになります。

答え2

長い答え:

いくつかの基本原理を理解しないと、launchd を操作するのは困難です。そのため、非常に多くの機能があるため、ステップバイステップの説明は見つからない可能性があります。ADC の入門ガイドを参照することをお勧めします。http://developer.apple.com/macosx/launchd.html

launchdまた、のマニュアル ページlaunchctlや .plist ファイルの構文も参照できますlaunchd.plist

エージェントまたはデーモンをどこに配置するかについてはよく誤解があるので、ここでそれに関する情報をいくつか紹介します。

  • ユーザーがログインしていないときでもジョブを実行する必要がある場合は、ジョブを /Library/LaunchDaemons に配置します。
  • ユーザーがログインしているときにのみ役立つ場合は、/Library/LaunchAgents または特定のユーザーの個人用 LaunchAgents ディレクトリ (~/Library/LaunchAgents) に配置します。
  • システム提供のデーモン用に予約されている /System/Library にジョブを配置しないでください。
~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System wide daemons provided by the administrator.
/System/Library/LaunchAgents   Mac OS X Per-user agents.
/System/Library/LaunchDaemons  Mac OS X System wide daemons.

短い答え:

plist ファイルの名前が間違っている可能性があります。今はテストできませんが、 に設定します 。ファイルを編集した場合は、デーモンをロードする前にnet.madrat.utils.sync.plist最初に を実行すると役立つ場合があります。unload

答え3

これが実際に標準的な動作であるというドキュメントは見つかりませんでしたが、launchd では plist ファイルに絶対パスが必要であるようです。/usr/bin/rsync代わりに試してください。私の場合はうまくいきました!

答え4

このキーをplistファイルに追加してみてください

    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>

関連情報