Warum funktioniert mein Cron-Job nicht richtig?

Ich habe einen Cron-Job auf einem Ubuntu Hardy VPS, der nur zur Hälfte funktioniert, und ich kann nicht herausfinden, warum. Der Job ist ein Ruby-Skript, das mysqldump verwendet, um eine MySQL-Datenbank zu sichern, die von einer Rails-Anwendung verwendet wird, die dann per SFTP komprimiert und auf einen Remote-Server hochgeladen wird.

Die gzip-Datei wird erfolgreich erstellt und kopiert, aber es sind immer null Bytes. Wenn ich den Befehl cron jedoch direkt von der Befehlszeile aus ausführe, funktioniert er einwandfrei.

Das ist der Cron Job:

PATH=/usr/bin
10 3 * * * ruby /home/deploy/bin/datadump.rb

Das ist 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'

Ich habe alle Pfade überprüft und sie sind korrekt. Beidesftp.yml (SFTP-Anmeldeinformationen) unddatabase.yml (MySQL-Anmeldeinformationen) gehören dem ausführenden Benutzer (deploy) mit schreibgeschützten Berechtigungen für diesen Benutzer (chmod 400). Ich verwende die 1.1.x-Versionen von net-ssh und net-sftp. Ich weiß, dass sie nicht die neuesten sind, aber sie sind das, was ich im Moment kenne.

Was könnte dazu führen, dass der Cron-Job fehlschlägt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage