¿Por qué mi trabajo de Cron no funciona correctamente?

Tengo un trabajo cron en un VPS de Hardy de Ubuntu que solo funciona a medias y no puedo entender por qué. El trabajo es un script Ruby que usa mysqldump para hacer una copia de seguridad de una base de datos MySQL utilizada por una aplicación Rails, que luego se envía en un archivo comprimido y se carga en un servidor remoto mediante SFTP.

El archivo gzip se crea y copia correctamente, pero siempre tiene cero bytes. Sin embargo, si ejecuto el comando cron directamente desde la línea de comandos, funciona perfectamente.

Este es el trabajo cron:

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

Esto es 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'

He comprobado y vuelto a comprobar todos los caminos y son correctos. Ambossftp.yml (Credenciales SFTP) ydatabase.yml (Las credenciales de MySQL) son propiedad del usuario que ejecuta (despliegue) con permisos de solo lectura para ese usuario (chmod 400). Estoy usando las versiones 1.1.x de net-ssh y net-sftp. Sé que no son las últimas, pero son las que estoy familiarizado en este momento.

¿Qué podría estar causando que el trabajo cron falle?

Respuestas a la pregunta(4)

Su respuesta a la pregunta