2013-04-17 65 views
0

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

<?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负载-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'拥有)运行正常,没有错误。

回答

1

当您通过plist运行脚本时,系统调用正在将其输出(system_profiler.txt)写入它无权写入的目录。当您手动或cron运行它时,它将写入具有适当权限的目录。

编辑脚本以将输出指向您有权访问的目录,例如, /usr/sbin/system_profiler -detailLevel full &> /tmp/system_profiler.txt

+0

谢谢,那就是诀窍。 – netllama

相关问题