2010-12-07 20 views
0

我有一個ruby程序,很簡單,只是在一堆主機上進行DNS查詢。該程序運行良好從終端(Mac OS X 10.6.5),Ruby 1.9.2使用RVM。Ruby prog不會像LaunchDaemon一樣運行

我想按計劃運行此操作並希望加載LaunchDaemon來執行此操作。該程序不作爲LauanchDaemon運行,並且輸出文件已創建,但爲空,所以我無法看到錯誤。我懷疑它與包含有關。

這裏是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.jsw.ping</string> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>Debug</key> 
    <true/> 
    <key>StandardOutPath</key> 
    <string>/var/jsw/logs/ping.txt</string> 
    <key>EnvironmentVariables</key> 
     <dict> 
      <key>PATH</key> 
       <string>/Users/scott/.rvm/gems/ruby-1.9.2-p0/bin:/Users/scott/.rvm/gems/[email protected]/bin:/Users/scott/.rvm/rubies/ruby-1.9.2-p0/bin:/Users/scott/.rvm/gems/[email protected]/bin:/Users/scott/.rvm/gems/[email protected]/bin:/Users/scott/.rvm/rubies/ruby-1.9.2-p0/bin:/Users/scott/.rvm/bin:/usr/local/maven/bin:/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin</string> 
     </dict> 
    <key>StandardErrorPath</key> 
    <string>/var/jsw/logs/ping.err.txt</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>ping.rb</string> 
    </array> 
    <key>StartInterval</key> 
     <integer>1800</integer> 
    <key>WorkingDirectory</key> 
     <string>/Library/WebServer/vHosts/scripts/ping/</string> 
    <key>UserName</key> 
     <string>scott</string> 
    </dict> 
</plist> 

的Ruby程序是:

#!/Users/scott/.rvm/rubies/ruby-1.9.2-p0/bin/ruby 
require 'rubygems' 
require 'active_record' 
require 'yaml' 
require 'dnsruby' 
include Dnsruby 


dbconfig = YAML::load(File.open('database.yml')) 
ActiveRecord::Base.establish_connection(dbconfig) 

# flush cache 
rslt = `dscacheutil -flushcache` 

Dnsruby::DNS.open 
rslvr = Dnsruby::DNS.new 

now = DateTime.now.to_s 
mysqlDT = now.gsub("T", " ") 
puts mysqlDT 


class Host < ActiveRecord::Base 
end 
class Ip < ActiveRecord::Base 
end 

Host.find_each do |svr| 
    ip = rslvr.getaddress(svr.host).to_s 
    svr.lastIP = ip 
    svr.save 
    Ip.create(:ip => ip, :host => svr.host, :DT => mysqlDT, :hostID => svr.id) 
end 
+0

您是否添加了某種記錄?在LaunchDaemon運行腳本的過程中,查看腳本內部發生的情況可能很有幫助。 – jergason 2010-12-07 05:10:40

回答

0

根本問題LaunchDaemon工作正在從沒有正確設置RVM的shell運行,因此無法找到包含的類。由於我的系統上沒有任何遺留的Ruby程序,我刪除了RVM,並在我的系統上的/ usr/local/bin中安裝了Ruby 1.9.2,然後重新安裝了gem。

第二個問題(無日誌記錄)是由於權限錯誤。