2016-05-07 16 views
0

私は非常に単純なLaunch Daemon、com.daily.vocab.plistを持っています。それは(StartCalendarIntervalを使用して)特定の時間に毎日実行するはずですが、私はそれが起こることができません。オンラインの多くの記事は、それが1〜2分遅れて実行されていると言っていますが、私にとっては決して実行されません。Launchdは手動で "launchctl start"を実行しますが、StartCalendarIntervalでは実行しません。

私はテスト中に実行時間を5分に設定しましたが、今は毎分0分に実行するように設定していますので、動作させることができます。それが動作したら、私はそれを私の望む毎日の実行時間に設定します。

this tutorialに記載されているとおり、/ Library/LaunchDaemonsに保存されます。私は手動ででロードしました。実際には、私がlaunchctl listを実行したときにロードされているのを見ています。手動でlaunchctl start com.daily.vocabで実行するように指示すると、期待どおりにすぐに動作します。唯一の問題は、StartCalendarIntervalが無視されるように見えることです。私は私のMacbookでMavericksにいる。ここで

ファイルです:com.daily.vocab.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>com.daily.vocab</string> 
    <key>Program</key> 
     <string>/Users/MGS/developer/projects/vocab-sms/scripts/DEvocab.sh</string> 
    <key>StartCalendarInterval</key> 
     <dict> 
     <key>Second</key> 
      <integer>0</integer> 
     </dict> 
    </dict> 
</plist> 

は、理想的には、私はStartCalendarIntervalセクションではなくなり作り、それは毎日7:15に実行したいと考えている:

<key>StartCalendarInterval</key> 
    <dict> 
     <key>Hour</key> 
     <integer>7</integer> 
     <key>Minute</key> 
     <integer>15</integer> 
    </dict> 

LaunchDaemonの例を共有することができた場合、StartCalendarIntervalを使用して作業しなければならない場合や、作業を進めるたびに(例えばlaunchctl load x.x.x.plistを実行するなど)、それは本当に役に立ちます!

解決策:このローカルデーモンは実際にはユーザーエージェントである必要がありますので、〜/ Library/LaunchAgentsディレクトリに保存してロードする必要がありました。そこから、エージェントをアンロードしてエージェントをリロードする必要もありました。

注:ロード/アンロードするまで、デーモン/エージェントはlaunchdで自動的に更新されません。更新された.plistを保存して動作させることはできません!

答えて

0

/Library/...に保存された起動ディスクは、ローカルドメインのデーモン/エージェントであり、sudoでロードする必要があります。 sudoがなければ、実際のパスと一致しないユーザドメインにデーモンをロードしています。

ユーザーのドメインでスクリプトを呼び出すため、~/Library/LaunchAgentsにスクリプトを保存します(デーモンではありません)。 plistの構文は正しいはずです。

+0

Hmm。まだ動かない。 com.daily.vocab.plistファイルが〜/ Library/LaunchAgentsに保存され、(sudoなしで)launchdにロードしました。 launchctl listがこれを確認します。しかし、それはまだ実行されていません。追加する必要のある特別なアクセス許可はありますか?エージェントが呼び出すシェルスクリプトには特別な権限が必要ですか? – mgs

+0

私は、StartCalendarIntervalではなくStartIntervalを使用するようにエージェントを変更しましたが、これは期待通りに機能しました。 StartCalendarIntervalが機能しない理由についてのアイデアはありますか? – mgs

+0

いいえ、 'StartCalendarInterval'構文には何も問題はなく、それ以上の権限も必要ありません。しかしもちろん、分と時間を設定することで、次の出現のために24時間待たなければならない;-) – vadian

関連する問題