0

我有一个 perl 脚本(实际上也可以在 Linux 和 Windows 上成功运行),我正试图通过 OSX-10.8.3 上的 launchd 运行它。我在编写 plist 文件方面相当缺乏经验,所以我希望这是我忽略的一些愚蠢的事情。我应该注意到它在 OSX 上通过 cron 运行良好,所以我遇到的问题是特定于 launchd 的。但是,当我尝试通过 launchd 运行它时,它在一些 perl 'system' 调用中出错,声称“没有这样的文件或目录”。这是列表:

<?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 有一个错误(每次调用):

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 回答