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?
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?
Respuestas:
Aquí hay un buen tutorial sobre qué es crontab y cómo usarlo en Ubuntu. Su línea crontab se verá así:
00 00 * * * ruby path/to/your/script.rb
( 00 00
indica medianoche - 0 minutos y 0 horas - y los *
s significan todos los días de cada mes).
Sintaxis: mm hh dd mt wd comando mm minuto 0-59 hh hora 0-23 dd día del mes 1-31 mt mes 1-12 wd día de la semana 0-7 (domingo = 0 o 7) comando: lo que quieres ejecutar todos los valores numéricos pueden reemplazarse por *, lo que significa que todos
/etc/crontab
(en Ubuntu), pero cuando ejecuta crontab -e
está editando un crontab específico del usuario, que no permite esta columna. IIRC Ubuntu desaconseja salir /etc/crontab
manualmente porque puede sobrescribirse. Ver aquí: stackoverflow.com/questions/8475694/…
sudo crotab -u root -e
desde la página del 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), en particular "@reboot", que no tiene una alternativa de fecha y hora.
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
También puede usar este truco para ejecutar su 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, puede hacer una de estas tres cosas:
agregue un comando al crontab de un usuario, como se muestra arriba (y de crontab, sección 5, página man).
crontab -e -u <username>
crontab -e
EDITOR
variable de entorno
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
cree un script / programa como trabajo cron y agréguelo a los /etc/cron.*ly
directorios anacron del sistema
chmod a+x /etc/cron.daily/script_runs_daily.sh
- hazlo ejecutableman anacron
chmod a+x <file>
/etc/crontab
o se /etc/anacrontab
ejecutan a una hora establecida/etc/anacrontab
, y definen cron.hourly en/etc/cron.d/0hourly
O, uno puede crear crontables del sistema en /etc/cron.d
.
/etc/cron.d
no necesitan ser ejecutables.someuser
, y el uso de /bin/bash
como el 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
A veces necesitará especificar PATH y GEM_PATH usando crontab con rvm.
Me gusta esto:
# 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
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 ejecuta esto, cron elimina lo que se ha almacenado y se actualiza con la nueva información en mycronjobs.txt )
crontab mycronjobs.txt
Información extra útil
Ver trabajos cron actuales
crontab -l
Eliminar todos los trabajos cron
crontab -r
Puede ejecutar el script de shell de dos maneras, ya sea utilizando el trabajo cron o escribiendo un script de shell
Supongamos que el nombre de su script es "yourscript.sh"
Primero verifique el permiso del usuario del script. use el siguiente comando para verificar el permiso del usuario del script
ll script.sh
Si la secuencia de comandos está en la raíz, utilice el siguiente comando
sudo crontab -e
En segundo lugar, si el script contiene al usuario "ubuntu", utilice el siguiente comando
crontab -e
Agregue la siguiente línea en su crontab: -
55 23 * * * /path/to/yourscript.sh
Otra forma de hacerlo es escribir un script y ejecutarlo en el fondo
Aquí está el script donde debe poner el nombre del script (por ejemplo: - youscript.sh) que se ejecutará a las 23:55 pm todos los días
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
guárdelo en un archivo (nombremos "every-day.sh")
dormir 1d: significa que espera un día y luego vuelve a funcionar.
ahora dé permiso a su script. use 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 cerrar sesión en su sesión.
use el siguiente comando para ejecutar el script.
nohup ./every-day.sh &
Nota: - para ejecutar "yourscript.sh" a las 23:55 pm todos los días, debe ejecutar el script "every-day.sh" exactamente a las 23:55 pm.