¿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?
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
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]]}
-
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
export EDITOR=vim
crontab -e
- Hacer scripts ejecutables con
chmod a+x <file>
- editar el crontab de un usuario como root con
-
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
- Para RHEL/CentOS 5.x, están configurados en
- anacron /etc/cron.*ly directorios:
-
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
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
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
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.
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