¿Cómo escribir un cron que ejecutará un script todos los días a medianoche?


He oído que crontab es una buena opción, pero ¿cómo escribo la línea y dónde la pongo en el servidor?

 124
Author: Hannele, 2010-10-21

5 answers

Aquí hay un buen tutorial sobre qué es crontab y cómo usarlo en Ubuntu. Su línea crontab se verá algo como esto:

00 00 * * * ruby path/to/your/script.rb

(00 00 indica medianoche 0 0 minutos y 0 horas {y los *s significan cada día de cada mes.)

Syntax: 
  mm hh dd mt wd  command

  mm minute 0-59
  hh hour 0-23
  dd day of month 1-31
  mt month 1-12
  wd day of week 0-7 (Sunday = 0 or 7)
  command: what you want to run
  all numeric values can be replaced by * which means all
 236
Author: Jordan Running,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-15 01:03:37

De la página de manual

linux$ man -S 5 crontab

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)
   ...
   # run five minutes after midnight, every day
   5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
   ...

Es bueno tener en cuenta los "apodos" especiales que se pueden usar (documentados en la página de manual), particularmente "@reboot" que no tiene alternativa de fecha y hora.

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

También puedes usar este truco para ejecutar tu trabajo cron varias veces por minuto.

   # Run every minute at 0, 20, and 40 second intervals
   * * * * *       sleep 00; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 20; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 40; /usr/local/sbin/run_3times_per_minute.sh

Para agregar un trabajo cron, puedes hacer una de tres cosas:{[24]]}

  1. Agregar un comando al crontab de un usuario, como se muestra arriba (y del crontab, sección 5, man pagina).

    • editar el crontab de un usuario como root con crontab -e -u <username>
    • o edite el crontab del usuario actual con solo crontab -e
    • Puede configurar el editor con la variable de entorno EDITOR
      • env EDITOR=nano crontab -e -u <username>
      • o establezca el valor de EDITOR para toda la sesión de shell
        1. export EDITOR=vim
        2. crontab -e
    • Hacer scripts ejecutables con chmod a+x <file>


  1. Crear un script / programa como un trabajo cron, y agregarlo a los directorios anacron /etc/cron.*ly

    • anacron /etc/cron.*ly directorios:
      • /etc/cron.diario
      • /etc/cron.por hora
      • /etc/cron.mensual
      • /etc/cron.weekly
    • como en:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh make hacerlo ejecutable
    • Véase también la página man de anacron: man anacron
    • Hacer scripts ejecutables con chmod a+x <file>
    • Cuando hacen estos cron.* ly script run?
      • Para RHEL/CentOS 5.x, están configurados en /etc/crontab o /etc/anacrontab para ejecutarse a una hora determinada
      • RHEL / CentOS 6.los sistemas Linux x+ y Fedora 17+ solo definen esto en /etc/anacrontab, y definen cron.por hora en /etc/cron.d/0hourly


  1. O bien, Uno puede crear system crontables en /etc/cron.d.

    • La sintaxis crontab previamente descrita (con adicionalmente proporcionar un usuario para ejecutar cada trabajo como) se coloca en un archivo, y el archivo se deja caer en el /etc/cron.d directorio.
    • Estos son fáciles de administrar en el empaquetado del sistema (por ejemplo, paquetes RPM), por lo que generalmente pueden ser específicos de la aplicación.
    • La diferencia de sintaxis es que se debe especificar un usuario para el trabajo cron después de los campos hora/fecha y antes del comando a ejecutar.
    • Los archivos agregados a /etc/cron.d no necesitan ser ejecutables.
    • Aquí hay un trabajo de ejemplo que es ejecutado como el usuario someuser, y el uso de /bin/bash como shell es forzado.


   File: /etc/cron.d/myapp-cron
   # use /bin/bash to run commands, no matter what /etc/passwd says
   SHELL=/bin/bash
   # Execute a nightly (11:00pm) cron job to scrub application records
   00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
 38
Author: Russell E Glaue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-31 20:18:20

A veces necesitará especificar PATH y GEM_PATH usando crontab con rvm.

Así:

# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global

# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
 5
Author: LV2014,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-06 16:31:38

Guía rápida para configurar un trabajo cron

Cree un nuevo archivo de texto, por ejemplo: mycronjobs.txt

Para cada trabajo diario(00:00, 03:45), guarde las líneas de programación en mycronjobs.txt

00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh

Envíe los trabajos a cron (cada vez que ejecute esto, cron elimina lo que se ha almacenado y actualiza con la nueva información en mycronjobs.txt )

crontab mycronjobs.txt

Información Adicional Útil

Ver trabajos actuales de cron

crontab -l

Eliminar todos los trabajos de cron

crontab -r
 4
Author: dyltini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-16 10:10:05

Puede ejecutar shell script de dos maneras,ya sea usando cron job o escribiendo un shell script

Supongamos que su nombre de script es "yourscript.sh"

Primero compruebe el permiso de usuario del script. utilice el siguiente comando para comprobar el permiso de usuario del script

Ll script.sh

Si el script está en root, entonces use el comando siguiente

Sudo crontab-e

Segundo si el script contiene el usuario "ubuntu", entonces use el comando debajo

Crontab-e

Agregue la siguiente línea en su crontab: -

55 23 * * * /path/to/yourscript.sh

Otra forma de hacer esto es escribir un script y ejecutarlo en el backgroud

Aquí está el script donde tiene que poner su nombre de script (por ejemplo: - youscript.sh) que se va a ejecutar a las 23:55pm todos los días

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

Guárdelo en un archivo (vamos a nombrarlo "every-day.sh")

Sleep 1d-significa que espera un día y luego corre de nuevo.

Ahora dale permiso a tu script.usar el siguiente comando: -

Chmod + x every-day.sh

Ahora, ejecute este script de shell en segundo plano usando "nohup". Esto seguirá ejecutando el script incluso después de salir de la sesión.

Use el siguiente comando para ejecutar el script.

Nohup. /every-day.sh &

Nota: - ejecutar "yourscript.sh" a las 23:55pm todos los días, tienes que ejecutar "every-day.sh" guión en exactamente 23: 55pm.

 1
Author: Modassir Haider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-18 20:21:18