0

OSX-10.8.3でlaunchdを介して実行しようとしているperlスクリプト(実際にはLinuxとWindowsでも正常に実行されます)があります。私は plist ファイルの作成にかなりの経験がないので、これが私が見落としていたばかげたものであることを願っています。OSX では cron 経由で問題なく動作するため、発生している問題は launchd に固有のものであることに注意してください。ただし、launchd を介して実行しようとすると、いくつかの perl 'system' 呼び出しでエラーが発生し、「そのようなファイルまたはディレクトリはありません」と主張します。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>launched.sysinv</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/perl</string>
                <string>/Users/lfriedman/cuda-stuff/sw/gpgpu/build/scripts/testing/sysinv.pl</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartCalendarInterval</key>
        <dict>
                <key>Hour</key>
                <integer>14</integer>
                <key>Minute</key>
                <integer>30</integer>
        </dict>
        <key>UserName</key>
        <string>lfriedman</string>
        <key>AbandonProcessGroup</key>
        <true/>
        <key>StandardOutPath</key>
        <string>/tmp/sysinv.out</string>
        <key>StandardErrorPath</key>
        <string>/tmp/sysinv.err</string>
</dict>
</plist>

「launchctl load -w launchd.sysinv.plist」でスクリプトをロードすると、/var/log/system.log に次のエラーが表示されます。

com.apple.launchd[1] (launched.sysinv[51676]): Exited with code: 1

/tmp/sysinv.out には、呼び出しごとに次の出力があります。

system(/usr/sbin/system_profiler -detailLevel full &> system_profiler.txt) failed: No such file or directory

/tmp/sysinv.err には、(呼び出しごとに) 1 つのエラーがあります。

sh: system_profiler.txt: Permission denied

これらのエラーの原因が何であるか混乱しています。ここでも、perl スクリプトを手動で (「lfriedman」ユーザーとして) 実行するか、cronjob (「lfriedman」が所有) を介して実行すると、エラーが発生せずに正常に動作します。

4

1 に答える 1

1

plist 経由でスクリプトを実行すると、システム コールはその出力 (system_profiler.txt) を書き込み権限のないディレクトリに書き込みます。手動または cron で実行すると、適切な権限を持つディレクトリに書き込みます。

スクリプトを編集して、出力がアクセス許可のあるディレクトリを指すようにします。/usr/sbin/system_profiler -detailLevel full &> /tmp/system_profiler.txt

于 2013-04-18T03:39:48.003 に答える