J'ai un programme ruby, assez simple, fait la recherche DNS sur un tas d'hôtes. Le programme fonctionne bien depuis le terminal (Mac OS X 10.6.5), Ruby 1.9.2 en utilisant RVM.Ruby prog ne fonctionnera pas en tant que LaunchDaemon
Je voudrais exécuter sur un calendrier et que vous souhaitez charger un LaunchDaemon de le faire. Le programme ne fonctionne pas en tant que LauanchDaemon, et les fichiers de sortie sont créés, mais vides, donc je suis incapable de voir les erreurs. Je soupçonne que cela a quelque chose à voir avec les inclusions.
Voici le plist (il charge bien et tente d'exécuter comme en témoigne la création de deux fichiers de sortie):
<?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>
Le programme Ruby est:
#!/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
Avez-vous ajouté une sorte de journalisation? Il peut être utile de voir ce qui se passe dans le script pendant qu'il est exécuté par LaunchDaemon. – jergason
Je ne suis pas sûr de savoir comment ajouter la journalisation. C'est ce que les chemins Std Out Path et Std Err sont censés faire, mais pour une raison quelconque, les fichiers sont vides – Scott