5

私はこれについて多くの異なるバリエーションを試しましたが、それを機能させることができません。

私は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.ilium007.handbrake</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>/Users/ilium007/support/scripts/handbrake/handbrake.sh &gt;&gt; /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>
                <!--<string>&gt;&gt;</string>-->
                <!--<string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>-->
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>60</integer>
</dict>
</plist>

そこにあるコメントに注意してください。

handbrake.shスクリプトからログファイルに出力をパイプしたいのですが、そうしようとしましたが、OSXのsystem.logで「そのようなファイルはありません」というエラーが発生し続けます。

Nov  3 18:03:54 macmini com.ilium007.handbrake[15348]: /bin/bash: /Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log: No such file or directory Nov  3 18:03:54 macmini com.apple.launchd.peruser.501[162] (com.ilium007.handbrake[15348]): Exited with code: 127

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.ilium007.handbrake</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>/Users/ilium007/support/scripts/handbrake/handbrake.sh</string>
                <string>&gt;&gt;</string>
                <string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>60</integer>
</dict>
</plist>

launchdを介して実行したいコマンドは次のとおりです。

/Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log

ログファイルには何も表示されません。しかし、ターミナルからそのコマンドを実行すると、ログにコンテンツが記録されます。どんな助けでもいただければ幸いです。

4

3 に答える 3

18

>>はプログラム引数ではなくシェル演算子であり、launchd はそのコマンドをシェル経由で渡しません (@Lauri の回答のように強制しない限り)。ただし、launchd には stdout をリダイレクトするための独自のオプションがあります。

<key>StandardOutPath</key>
<string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>

>>自動的に追加されることに注意してください (ではなくと同等>)。キーを使用して stderr をリダイレクトすることもできStandardErrorPathます。できないことの 1 つは~(~/support/scripts/handbrake/logs/handbrake_encode.log のように) を使用することです。これも、launchd がエミュレートしないシェル機能です。

于 2012-11-03T16:14:20.370 に答える
4

リダイレクト演算子は引数として使用できません。パイプライン用に別のスクリプトを作成するか、bash -c.

<string>bash</string>
<string>-c</string>
<string>bash ~/Desktop/test.sh >> ~/Desktop/test</string>
于 2012-11-03T15:27:57.400 に答える