Lucas publicado hai un tempo excelente titorial sobre cron e crontab iso creo que paga a pena compartilo. Cron é unha especie de equivalente ás Tarefas programadas en Windows, só que se manexa desde o terminal. Quen prefire unha interface visual para acadar o mesmo obxectivo, pode velo outro artigo. |
Que é cron?
O nome cron vén do grego chronos que significa "tempo". No sistema operativo Unix, cron é un xestor de procesos de fondo regular (daemon) que executa procesos ou scripts a intervalos regulares (por exemplo, cada minuto, día, semana ou mes). Os procesos que se deben executar e o momento en que deben executarse están especificados no ficheiro crontab.
como funciona
O demonio cron comeza desde /etc/rc.d/ o /etc/init.d dependendo da distribución. Cron execútase en segundo plano, verifica a táboa de tarefas crontab cada minuto / etc / crontab o en / var / spool / cron na procura de tarefas a realizar. Como usuario podemos engadir comandos ou scripts con tarefas para cron para automatizar algúns procesos. Isto é útil por exemplo para automatizar a actualización dun sistema ou un bo sistema de copia de seguridade.
Que é Crontab?
Crontab é un ficheiro de texto sinxelo que almacena unha lista de comandos a executar nun momento especificado polo usuario. Crontab comprobará a data e a hora en que se debe executar o script ou o comando, os permisos de execución e farano nun segundo plano. Cada usuario pode ter o seu propio ficheiro crontab, de feito o / etc / crontab suponse que é o ficheiro crontab do usuario root, cando os usuarios normais (e incluso root) queren xerar o seu propio ficheiro crontab entón usaremos o comando crontab.
Crontab é o xeito máis sinxelo de xestionar tarefas cron en sistemas multiusuarios, xa sexa como un usuario do sistema ou como usuario root.
Usando crontab
Comezamos cun exemplo sinxelo.
Imos automatizar a actualización dun sistema, para eliminar o molesto de "Sempre teño que actualizar e iso non me gusta!"
Primeiro de todo faremos un guión. Este script será chamado por cron e conterá todas as instrucións que queremos que faga, polo que é necesario probalo en varios casos e de varias maneiras antes de incluílo en cron, un sinxelo script de actualización coma este:
#! / bin / bash # exemplo de actualización de scripts #elixe a túa distribución # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Elimina o # da túa liña de distro. No caso de que sexa Ubuntu / Debian, comeza con apt-get.
Gardamos o script como update.sh (por exemplo, o directorio de scripts na súa casa). Cambiamos os permisos de execución do devandito script con:
chmod a + x ~ / scripts / update.sh
Executamos o script un par de veces para comprobar que todo funciona correctamente, modificamos o necesario (non debe conter erros, se non, cron só repetirá un erro unha e outra vez). Agora engade a tarefa ao noso crontab.
Engade tarefas a crontab
Executamos a edición do crontab con crontab -e, nalgunhas distros (como Ubuntu) dános a opción de escoller o editor de texto que queiramos, o resto quedámonos con vi. O ficheiro crontab terá un aspecto así.
Comando de usuario # mh dom mon dow
onde:
- m corresponde ao minuto no que se executará o script, o valor oscila entre 0 e 59
- h a hora exacta, trátase o formato de 24 horas, os valores varían de 0 a 23, sendo 0 a 12:00 da medianoite.
- don refírese ao día do mes, por exemplo, pode especificar 15 se quere executarse cada 15 días
- abaixo significa o día da semana, pode ser numérico (do 0 ao 7, onde o 0 e o 7 son domingo) ou as 3 primeiras letras do día en inglés: luns, martes, mércores, xoves, venres, sábados, sol.
- usuario define o usuario que executará o comando, pode ser root ou un usuario diferente sempre que teña permisos para executar o script.
- mando refírese ao comando ou ao camiño absoluto do script a executar, exemplo: /home/usuario/scripts/update.sh, se chama a un script, debe ser executable
Para ter claros algúns exemplos de tarefas cron explicadas:
15 10 * * * usuario /home/user/scripts/update.sh
Executará o script update.sh ás 10:15 da mañá todos os días
15 22 * * * usuario /home/user/scripts/update.sh
Executará o script update.sh ás 10:15 horas todos os días
00 10 * * 0 root apt-get -y update Usuario raíz
Actualizarase todos os domingos ás 10:00 horas
45 10 * * Sun root apt-get -y update
O usuario raíz executará unha actualización todos os domingos (dom) ás 10:45 da mañá
30 7 20 11 * usuario /home/usuario/scripts/update.sh
O 20 de novembro ás 7:30 o usuario executará o script
30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh
O 11 de novembro ás 7:30 da mañá e é o domingo, o usuario celebrará o seu administrador de sistemas (é dicir, eu)
01 * * * * usuario /home/user/scripts/molestorecordatorio.sh
Un molesto recordatorio cada minuto de cada hora todos os días (NON recomendado).
Aínda se poden manexar gamas especiais:
30 17 * * 1,2,3,4,5
Ás 5:30 da tarde todos os días de luns a venres.
00 12 1,15,28 * *
Ás doce do mediodía cada primeiro, quince e 12 de cada mes (ideal para nóminas)
Se isto é confuso, os controladores crontab cadeas especiais para definir estes rangos.
@reboot Executa unha vez, ao iniciar
@yearly só funciona ao ano: 0 0 1 1 *
@ anualmente igual que @anualmente
@ mensualmente execútase unha vez ao mes, o primeiro día: 0 0 1 * *
@weekly Weekly o primeiro minuto da primeira hora da semana. 0 0 * * 0 ″.
@ diario a diario, ás 12:00 a.m. 0 0 * * *
@midnight igual que @daily
@hourly no primeiro minuto de cada hora: 0 * * * *
O seu uso é moi sinxelo.
@ usuario por hora /home/user/scripts/molestorecordatorio.sh @ usuario mensual /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Por último, pero non menos importante:
Xestión de postos de traballo Cron
ficheiro crontab
Substitúe o ficheiro crontab existente por un ficheiro definido polo usuario
crontab -e
Edite o ficheiro crontab do usuario, cada nova liña será unha nova tarefa crontab.
crontab -l
Enumere todas as tarefas crontab do usuario
crontab -d
Elimina o crontab do usuario
crontab -c dir
Define o directorio crontab do usuario (debe ter os permisos de escritura e execución do usuario)
usuario crontab -u
prefixo para tratar o crontab doutro usuario, exemplos:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user
Esta ferramenta, como moitas outras, pódese ver con máis profundidade e detalle en:
48 comentarios, deixa os teus
Uf ... un pouco confuso.
* / 30 falta (no campo de minutos) que se executa cada 30 minutos ...
Só isto ía comentalo ata que decidín revisar os comentarios 😀
Este modificador é unha información moi importante e algo moi útil.
Ola!
Agora mesmo estou probando unha configuración cada 45 minutos.
* / 45 * * * *, e a instrución execútase aos 45 minutos de cada hora E cada hora. É dicir:
Funciona ás 3:45, despois ás 4:00, ás 4:45, despois ás 5:00, ás 5:45, ás 6:00, ás 6:45, etc.
Teño algo mal? Que podo facer para que só sexa cada 45 minutos ou polo menos unha vez aos 45 minutos cada hora.
Ola!
Agora mesmo estou probando unha configuración cada 45 minutos.
* / 45 * * * *, e a instrución execútase aos 45 minutos de cada hora E cada hora. É dicir:
Funciona ás 3:45, despois ás 4:00, ás 4:45, despois ás 5:00, ás 5:45, ás 6:00, ás 6:45, etc.
Teño algo mal? Que podo facer para que só sexa cada 45 minutos ou polo menos unha vez aos 45 minutos cada hora.
Ola, moi útil a información para aclarar o funcionamento do cron.
Bytes
co propósito de *
Excelente, grazas por aclarar como funciona o cron .. poñamos un pouco a man 🙂
Esta liña, segundo teño entendido, executarase ás 10:15 horas. Corrixe se me equivoco
Ben, alí di as 10:15 da mañá
15 22 * * * usuario /home/user/scripts/update.sh
Ola! moi boa información.
Para executar un script cada media hora, a liña que se debería engadir a CronTab sería: "30 * * * * root Scrip.sh" ¿Correcto? Moitas grazas!
Non. Se non recordo mal, para iso tes que poñer / 30 * * * * root Scrip.sh.
É dicir, engade o / antes do 30.
Ánimo! Paul.
Ola gustoume a túa publicación, é moi completa pero quería preguntarche algo.
Estou tendo problemas con este comando e outro como "at".
Quero executar un script nun momento determinado e poñer
en -f /home/mi_user/Desk/script.sh 18:08 exemplo
e o script non se executa na pantalla, quero dicir no terminal, execútase en segundo plano?
E con cron pásame o mesmo, edito o ficheiro crontab con "crontab -e"
ao final engado esta liña:
46 19 my_user /home/mi_user/Desk/script.sh
e non fai nada, non mostra o guión.
Algunha suxestión? Moitas grazas e desculpade as molestias
Para que apareza o terminal, pode que teña que executalo e pasar o script como parámetro.
Por exemplo:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
O parámetro a usar pode variar en función do emulador de terminal que use.
Espero que funcione.
Abrazo! Paul.
Agradécese a contribución.
10 puntos!!
saúdo 2!!
Moitas grazas, axudoume moito a aclarar algunhas cousas, grazas totais, por máis detalles ou preguntas dirixireime á PÁXINA DO HOME, reiterados saúdos.
home moitas grazas, estiven lendo e probando os exemplos. moitas grazas ... é moi comprensible. Graciñas
Eu usei ubuntu Server 12.04.2 LTS, e a versión de crontab que teño, para eliminar a lista de traballos do usuario, crontab -r (e -l, como di este manual). Claro que se trata de versións.
Por outra banda, unha vez executei só crontab e este tipo deixoume crear o meu propio ficheiro de execución, pero este non foi o que se estaba executando. O que se executa é o de / etc / crontab. quizais alguén empregue o comentario.
PS (busquei localizar e onde está crontab pero só devolveu o enderezo mencionado e outro ficheiro cifrado, polo que se o que se executou era o de / etc / crontab, pero ao executar o comando crontab -e aparecería o meu con todos os traballos que definira) onde se almacenaba este ficheiro? Saúdos. Sempre accedo con root.
Excelente, moi útil !!!
Ola, gustaríame facelo ………… «15 10 * * * root ifdown eth0»
é dicir, que nun momento determinado a tarxeta de rede está apagada ...... ben, púxena no crontab e non funcionou ...... ¿que pasa?
Saúdos e grazas
Faltou a definición de "mon" despois do título "Engadir tarefas a crontab"
O artigo segue sendo bo, cron é extremadamente útil.
Que chulo foi ese bo post, pregúntame
Se quero facer un seguimento dos rexistros que deixou a execución das tarefas, onde podo velo?
é decidir quero ver o historial das accións feitas no pasado deste ficheiro e quero ver quen o modificou e a data
grazas
Quero comprobar o historial de modificacións desta
como podo facelo?
grazas
Bo día,
Creo que no script de Ubuntu cometeu un erro, puxo actualización ap-get -y en vez de apt-get -y upgrade. (Deixaches unha t).
Un saúdo.
Tamén o é. Grazas!
Abrazo! Paul
Quero saber como crear un ficheiro cron para poder especificar a hora en que se executa, o directorio, etc.
Grazas por aclarar o funcionamento e os comandos básicos para cron, agora para divertirse un pouco.
Sempre que busco información sobre calquera tema relacionado con Gnu / Linux dou voltas e voltas para atopar no 90% dos casos o mellor tutorial desta gran comunidade, creo que a partir de agora comezarei aquí e logo noutros lugares.
lembranzas
Grazas Sander! Unha aperta! Paul.
dom = día do mes
dow = día da semana
é máis doado se asocias
Moitas grazas, isto é moi completo e está ben explicado.
Isto é o mesmo que nos deu o meu profesor de SO, non cambio nada, agora vexo por que a clase é tan mala .- Ben, isto é o mesmo que os deberes xD
Querido,
Consulta, pódese limitar a duración dunha tarefa?
Por exemplo, teño unha tarefa que se repite cada 5 minutos, se se repite se esta tarefa aínda está activa, mátaa e volve executala.
Grazas,
Marcelo.-
Ola, Marcelo!
Creo que sería mellor que formulase esta pregunta no noso servizo de preguntas e respostas chamado Pregunta a Linux para que toda a comunidade poida axudarche co teu problema.
Unha aperta, Pablo.
bo post.
Cal é o comando por terminal para engadir tarefas ao crontab (sen entrar no crontab e engadilas manualmente por 'crontab -e' ou substituír o crontab por outro crontab por 'ficheiro crontab').
A idea é crear un script externo para engadir as tarefas ao crontab
grazas
paréceme que podería usar "eco" o que queira engadir "| cat >> 'ruta cronotab (/ etc / cronotab)' «
Como se executaría unha expresión cada 3 días exactamente
Olá
Teño un problema ao executar un traballo cron.
Realizo a seguinte tarefa con cronta -e:
01 * * * * root /home/user/script/mfile.sh
pero a tarefa non está feita. Comprobei que myfile.sh ten permiso de execución e que o usuario que o executa é root.
Executo a mesma tarefa en / etc / crontab e despois de reiniciar o servizo, tampouco me funciona.
O contido de myfile.sh é un comando que actualiza unha base de datos e se a executo na consola funciona.
algunha idea de cal pode ser o problema?
É posible que o usuario da base de datos non teña todos os permisos e primeiro terá que exportar as variables de entorno dende o seu motor de base de datos.
Por exemplo, en db2 esta liña iría ao comezo do script
. / home / db2inst1 / sqllib / db2profile
Outra causa pode ser que o script require conexión coa base de datos, faga a conexión coa base de datos dentro do script
Non sabía que tiña que reiniciar o crond, levaba tempo loitando con isto
Saberán como indicar que a tarefa se executa cada fin de mes, á hora indicada .. o detalle é que non podo conseguir como sei que tardará o último día de cada mes .. ??? Tiven que anotalos un por un pero cando chega o final do mes de febreiro que é biciesto é complicado para min.
bo día!!
Como podo parar o proceso que se está a executar no crontab?
proceso * …………
¿Pode ser que me poida axudar? eu tenho um script de minha authored that does not work no crontab! De todos os permisos, non hai ningún cron ou usuario privado que poida executalo, a maioría non pasa nada. Gustaríame saber se me podes axudar, algunhas outras cousas non funcionan. Vlws
Como poñerías unha tarefa para executarse todos os últimos días do mes (días: 31-30-28)?
Como xa sabes, o comando su úsase para cambiar de usuario nunha consola. Se uso o comando su así: "o teu usuario" cambia de usuario pero sen a configuración adecuada de "usuario", se executo su como: "o seu" usuario cambia o usuario cargando a configuración do usuario. Con cron indico o usuario, pero como cargo as configuracións deste usuario?
E se quero paralo?
Ola,
Non sei que fago mal, pero sigo os pasos e non se executa nada. Intentei:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
e nada de nada. Non executa nada. Reiniciou e todo.
moitas grazas