rails create ruby-on-rails ruby-on-rails-3 cron crontab whenever

ruby-on-rails - create - whenever rails heroku



No se puede probar el trabajo cron usando cada vez que gem in rails 3 (4)

Comprobé el contenido de los archivos desplegables del correo según lo sugerido por tamouse. Veo una ubicación de registro cron a la que se hace referencia en estos archivos, pero estos archivos no se generan ni están presentes en la ubicación correspondiente.

/var/spool/cron/crontabs/<username>

Begin Whenever generated tasks for: <RAILS_ROOT>/config/schedule.rb /bin/bash -l -c ''cd <RAILS_ROOT> && script/rails runner -e development ''/'''Cron.sendAutomaticsSMS()''/''' >> /log/cron.log 2>> /log/error.log''

/var/mail/<username> From ankur@ankur-Lenovo-G470 Fri May 30 21:29:01 2014 Return-Path: <ankur@ankur-Lenovo-G470> X-Original-To: ankur Delivered-To: ankur@ankur-Lenovo-G470 Received: by ankur-Lenovo-G470 (Postfix, from userid 1000) id D885D16172C; Fri, 30 May 2014 21:29:01 +0530 (IST) From: root@ankur-Lenovo-G470 (Cron Daemon) To: ankur@ankur-Lenovo-G470 Subject: Cron <ankur@ankur-Lenovo-G470> /bin/bash -l -c ''cd <RAILS_ROOT> && script/rails runner -e development ''/'''Cron.sendAutomaticsSMS()''/''' >> /log/cron.log 2>> /log/error.log'' Content-Type: text/plain; charset=ANSI_X3.4-1968 X-Cron-Env: < SHELL=/bin/sh > X-Cron-Env: < HOME=/home/username > X-Cron-Env: < PATH=/usr/bin:/bin > X-Cron-Env: < LOGNAME=username > Message-Id: <20140530155901.D885D16172C@ankur-Lenovo-G470> Date: Fri, 30 May 2014 21:29:01 +0530 (IST) /bin/bash: /log/cron.log: No such file or directory

Hice lo siguiente para implementar trabajos cron en rails 3 usando un "corredor" en lugar de una tarea de rake.

Paso 1: tengo cada vez que se instala gema y scheduler.rb tiene lo siguiente:

set :environment, ''development'' set :output, { :error => "/log/error.log", :standard => "/log/cron.log" } every 1.minute do runner "Cron.sendAutomaticsSMS()" end

Paso 2:

Archivo cron: lib / cron.rb

class Cron < ActiveRecord::Base def **sendAutomaticsSMS**() ----some code here --- end end

Paso 3:

whenever --update-crontab --set environment=development

Esto actualiza el archivo crontab.

Etapa 4:

Comprueba el contenido del archivo crontab usando:

crontab -e

Abre el archivo cron tab que tiene detalles del método cron job a invocar:

# Begin Whenever generated tasks for: store # End Whenever generated tasks for: store # Begin Whenever generated tasks for: /code/rails_projects/new/bhk/bigbhk- dev/config/schedule.rb * * * * * /bin/bash -l -c ''cd <*RAILS_APP_PROJECT_LOCATION*> && script/rails runner -e development ''/'''**Cron.sendAutomaticsSMS()**''/''' >$ # End Whenever generated tasks for: /code/rails_projects/new/bhk/bigbhk-dev/config/schedule.rb

Paso 5:

Ejecutando cron job:

$sudo service cron restart cron stop/waiting cron start/running, process 4027

Esto no hace nada. Espero la operación como se define en el método sendAutomaticsSMS () para ejecutar pero el cron ni siquiera ingresa este método.

No veo ningún error en log / development.log y no hay log / cron.log en mi aplicación Rails.


Su tarea cron está intentando escribir en /log/ , es decir, un directorio en el nivel raíz del sistema de archivos. Al ver eso ahora en su archivo schedule.rb:

set :output, { :error => "/log/error.log", :standard => "/log/cron.log" }

Creo que lo que necesitarás allí es:

log_dir = File.expand_path("../log/", __FILE__) set :output, { :error => File.join(log_dir, "error.log"), :standard => File.join(log_dir, "cron.log") }


-Me parece que el archivo / var / log / syslog se actualiza con la invocación de cron cada 1 minuto, que es mi período de trabajo de cron. Estoy enumerando debajo de seguimiento de registro para dos invocaciones consecutivas.

-Pero no se genera ningún archivo de error en la ubicación de registro definida y el trabajo cron no se ejecuta

/code/rails_projects/new/bhk/bigbhk-dev/config/log/cron.log (path for this location is defined in config/scheduler.rb file)

-Log Trace:

Primera invocación:

Jun 8 20:02:01 ankur-Lenovo-G470 CRON[27365]: (ankur) CMD (/bin/bash -l -c ''cd /code/rails_projects/new/bhk/bigbhk-dev && script/rails runner -e development ''/'''Cron.sendAutomaticsSMS()''/''' >> /code/rails_projects/new/bhk/bigbhk-dev/config/log/cron.log 2>> /code/rails_projects/new/bhk/bigbhk-dev/config/log/error.log'') Jun 8 20:02:02 ankur-Lenovo-G470 postfix/pickup[22599]: 02CEA161719: uid=1000 from=<ankur> Jun 8 20:02:02 ankur-Lenovo-G470 postfix/cleanup[22701]: 02CEA161719: message-id=<20140608143202.02CEA161719@ankur-Lenovo-G470> Jun 8 20:02:02 ankur-Lenovo-G470 postfix/qmgr[12204]: 02CEA161719: from=<ankur@ankur-Lenovo-G470>, size=878, nrcpt=1 (queue active) Jun 8 20:02:02 ankur-Lenovo-G470 postfix/local[22703]: 02CEA161719: to=<ankur@ankur-Lenovo-G470>, orig_to=<ankur>, relay=local, delay=0.14, delays=0.09/0/0/0.04, dsn=2.0.0, status=sent (delivered to mailbox) Jun 8 20:02:02 ankur-Lenovo-G470 postfix/qmgr[12204]: 02CEA161719: removed

Segunda invocación:

Jun 8 20:03:01 ankur-Lenovo-G470 CRON[27468]: (ankur) CMD (/bin/bash -l -c ''cd /code/rails_projects/new/bhk/bigbhk-dev && script/rails runner -e development ''/'''Cron.sendAutomaticsSMS()''/''' >> /code/rails_projects/new/bhk/bigbhk-dev/config/log/cron.log 2>> /code/rails_projects/new/bhk/bigbhk-dev/config/log/error.log'') Jun 8 20:03:01 ankur-Lenovo-G470 postfix/pickup[22599]: 431E5161719: uid=1000 from=<ankur> Jun 8 20:03:01 ankur-Lenovo-G470 postfix/cleanup[22701]: 431E5161719: message-id=<20140608143301.431E5161719@ankur-Lenovo-G470> Jun 8 20:03:01 ankur-Lenovo-G470 postfix/qmgr[12204]: 431E5161719: from=<ankur@ankur-Lenovo-G470>, size=878, nrcpt=1 (queue active) Jun 8 20:03:01 ankur-Lenovo-G470 postfix/local[22703]: 431E5161719: to=<ankur@ankur-Lenovo-G470>, orig_to=<ankur>, relay=local, delay=0.14, delays=0.09/0/0/0.04, dsn=2.0.0, status=sent (delivered to mailbox) Jun 8 20:03:01 ankur-Lenovo-G470 postfix/qmgr[12204]: 431E5161719: removed

-También en var / log / auth / log , veo lo siguiente:

Jun 8 19:52:38 ankur-Lenovo-G470 sudo: ankur : TTY=pts/3 ; PWD=/code/rails_projects/new/bhk/bigbhk-dev ; USER=root ; COMMAND=/usr/sbin/service cron restart Jun 8 19:52:38 ankur-Lenovo-G470 sudo: pam_unix(sudo:session): session opened for user root by ankur(uid=0) Jun 8 19:52:38 ankur-Lenovo-G470 sudo: pam_unix(sudo:session): session closed for user root Jun 8 20:03:01 ankur-Lenovo-G470 CRON[27467]: pam_unix(cron:session): session opened for user ankur by (uid=0) Jun 8 20:03:01 ankur-Lenovo-G470 CRON[27467]: pam_unix(cron:session): session closed for user ankur

-Los mensajes de registro que estoy imprimiendo en mi método de trabajo cron: sendAutomaticsSMS (), tampoco están siendo registrados en ningún lado, lo que significa que la ejecución del trabajo ni siquiera está comenzando.

¿Alguna otra pista de depuración?


Creo que este es el quid de su problema: /bin/bash: /log/cron.log: No such file or directory . No hay un directorio de log en la raíz de la unidad. Intente cambiar sus rutas de registro a /var/log/error.log y /var/log/cron.log .