/Library/LaunchDaemons の plist ファイルを使用して、起動時に launchd でシェル スクリプトを実行しようとしています (問題がある場合は 10.8.x で):
<?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>testD</string>
<key>ProgramArguments</key>
<array>
<string>/Users/lfriedman/cuda-stuff/sw/gpgpu/build/scripts/testing/testD.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>UserName</key>
<string>lfriedman</string>
<key>AbandonProcessGroup</key>
<false/>
<key>StandardOutPath</key>
<string>/tmp/testD.out</string>
<key>StandardErrorPath</key>
<string>/tmp/testD.err</string>
</dict>
</plist>
シェル スクリプト内には、「hostname -s」への呼び出しがあります。スクリプトを手動で実行すると、すべて正常に動作します。cron 経由でスクリプトを実行すると、すべて正常に動作します。ただし、起動時に launchd を介して実行すると、'hostname -s' から返される値は、システムの実際のホスト名ではなく、常に (誤って) 'localhost' として返されます。起動時以外にスクリプトを実行するように plist を微調整すると、正しい処理が行われ、システムの実際の短いホスト名が返されます。これは、OS のネットワーク サブシステムが完全に実行される前に、launchd がそのジョブを起動している場所で、ある種の競合状態が発生していると考えるように導きます。
launchd がジョブを実行する前に、OS が「完全に」起動されていることを確認する特別な方法はありますか? または、プログラムが呼び出される前に plist ファイル内で遅延を強制する方法はありますか?