मेरे पास उबंटू हार्डी वीपीएस पर एक क्रॉन नौकरी है जो केवल आधे काम करता है और मैं क्यों काम नहीं कर सकता। नौकरी एक रूबी स्क्रिप्ट है जो एक रेल अनुप्रयोग द्वारा उपयोग किए गए एक MySQL डेटाबेस का बैक अप लेने के लिए mysqldump का उपयोग करती है, जिसे तब gzipped और SFTP का उपयोग कर रिमोट सर्वर पर अपलोड किया जाता है।मेरा क्रॉन नौकरी उचित तरीके से क्यों नहीं काम करता है?
gzip फ़ाइल बनाई गई है और सफलतापूर्वक कॉपी की गई है लेकिन यह हमेशा शून्य बाइट्स है। फिर भी अगर मैं सीधे कमांड लाइन से क्रॉन कमांड चलाता हूं तो यह पूरी तरह से काम करता है।
PATH=/usr/bin
10 3 * * * ruby /home/deploy/bin/datadump.rb
यह datadump.rb है:
इस क्रॉन जॉब है
#!/usr/bin/ruby
require 'yaml'
require 'logger'
require 'rubygems'
require 'net/ssh'
require 'net/sftp'
APP = '/home/deploy/apps/myapp/current'
LOGFILE = '/home/deploy/log/data.log'
TIMESTAMP = '%Y%m%d-%H%M'
TABLES = 'table1 table2'
log = Logger.new(LOGFILE, 5, 10 * 1024)
dump = "myapp-#{Time.now.strftime(TIMESTAMP)}.sql.gz"
ftpconfig = YAML::load(open('/home/deploy/apps/myapp/shared/config/sftp.yml'))
config = YAML::load(open(APP + '/config/database.yml'))['production']
cmd = "mysqldump -u #{config['username']} -p#{config['password']} -h #{config['host']} --add-drop-table --add-locks --extended-insert --lock-tables #{config['database']} #{TABLES} | gzip -cf9 > #{dump}"
log.info 'Getting ready to create a backup'
`#{cmd}`
# Strongspace
log.info 'Backup created, starting the transfer to Strongspace'
Net::SSH.start(ftpconfig['strongspace']['host'], ftpconfig['strongspace']['username'], ftpconfig['strongspace']['password']) do |ssh|
ssh.sftp.connect do |sftp|
sftp.open_handle("#{ftpconfig['strongspace']['dir']}/#{dump}", 'w') do |handle|
sftp.write(handle, open("#{dump}").read)
end
end
end
log.info 'Finished transferring backup to Strongspace'
log.info 'Removing local file'
cmd = "rm -f #{dump}"
log.debug "Executing: #{cmd}"
`#{cmd}`
log.info 'Local file removed'
मैं देख लिया है और सभी रास्तों की दोबारा जांच कर और वे सही कर रहे हैं। sftp.yml (एसएफटीपी प्रमाण-पत्र) और डेटाबेस.मिल (MySQL प्रमाण-पत्र) निष्पादन उपयोगकर्ता (तैनाती) के स्वामित्व वाले उपयोगकर्ता (chmod 400) के लिए केवल पढ़ने की अनुमति के साथ स्वामित्व में हैं। मैं net-ssh और net-sftp के 1.1.x संस्करणों का उपयोग कर रहा हूं। मुझे पता है कि वे नवीनतम नहीं हैं, लेकिन वे इस समय से परिचित हैं।
क्रॉन नौकरी विफल होने के कारण क्या हो सकता है?