2013-04-17 64 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

相關問題