Os sitios web poden executar tarefas programadas con Cron

reloxo

Traballamos cunha serie de sistemas de monitorización redundantes que executan procesos regularmente. Algúns corren cada minuto, outros unha vez á noite, dependendo do que fagan. Por exemplo, podemos executar un script que exporte a todos os clientes que non fixeron ningunha compra en 30 días para enviarlles un cupón.

En vez de tratar de facer un seguimento de todos estes a man, é moito máis doado crear traballos que se programen e executan automaticamente. Nos sistemas baseados en Unix, isto faise con Cron. Para vostedes que saben o que están a facer, non dubide en educarme a min e aos lectores se desboto algunha desinformación.

É lamentable, pero o típico desenvolvedor web non coñece en absoluto a Cron. Aínda que o sexan, as empresas de hospedaxe web a miúdo non fornecen acceso nin son compatibles con Cron. O meu anfitrión é un destes últimos: permítenlle usalo, pero non o admiten.

Que é Cron?

Cron recibe o nome da palabra grega Chronos, que significa tempo. Cron execútase nun bucle continuo para executar tarefas acumuladas por Crontab (quizais nomeadas por abaulador. Estas tarefas normalmente denomínanse Cronjobs e poden facer referencia a scripts no seu sitio.

Explicación do diagrama Cron

Como configuro o Crontab

Conseguir que Cron funcione realmente pode ser un desafío, así que aquí aprendín e como o fixen Se Chupar:

  1. Configorei o meu guión para comprobar o de Twitter API a ver se alguén lle respondera @ifsuck. Comparei esas mensaxes coas mensaxes que xa gardei no sitio web, introducindo outras novas.
  2. Unha vez que o script estivo funcionando, habilitei permisos para que o usuario o executase (744) e engadín a referencia ao meu ficheiro Cronjob. Máis información sobre isto máis tarde.
  3. Despois tiven que iniciar sesión no meu sitio web a través de SSH. Nun Mac, foi necesario abrir Terminal e escribir Nome de usuario SSH@dominio.com onde o nome de usuario era o nome de usuario que desexaba usar e o dominio era o sitio web. A continuación, pedíronme e deume o contrasinal.
  4. Despois tentei executar o script directamente desde o símbolo do sistema escribindo o nome do ficheiro e a ruta relativa no servidor: /var/www/html/myscript.php
  5. Unha vez que o conseguín funcionando correctamente, engadín o código Unix necesario na primeira liña do ficheiro: #! / usr / bin / php -q . Creo que isto simplemente lle di a Unix que utilice PHP para executar o script.
  6. Na liña de comandos de Terminal escribín crontab (é posible que outros teñan que escribir crontab -e) e prema Intro ... e iso era todo o que facía falta!

Sintaxe para o seu ficheiro Cronjob

Con respecto ao número 2 anterior, Cron utiliza un enxeñoso esquema para determinar cando se executarán os seus scripts. De feito, realmente podes copialo e pegalo no teu Cronfile (no meu servidor, está situado en / var / spool / cron / co nome do ficheiro o mesmo que o meu nome de usuario).

# + —————- minuto (0 - 59)
# | + ————- hora (0 - 23)
# | | + ———- día do mes (1 - 31)
# | | | + ——- mes (1-12)
# | | | | + —- día da semana (0-6) (domingo = 0 ou 7)
# | | | | |
* * * * * /var/www/html/myscript.php

O anterior executará o meu script cada minuto. Se só quixera que se executase unha vez por hora, só poñería cantos minutos despois da hora desexaría que se executase, polo tanto, se estaba nos 30 minutos:

30 * * * * /var/www/html/myscript.php

Asegúrese de configurar tamén os permisos deste ficheiro como executable. Descubrín que a sintaxe, os permisos e a execución de crontab desde a xanela de Terminal eran os factores máis importantes. Cada vez que gardaría de novo o ficheiro, atoparía que os meus permisos tamén necesitaban restablecerse.

ACTUALIZACIÓN: Se desexa asegurarse de que os traballos están en execución, un xeito sinxelo é actualizar un campo de base de datos coa última vez que se executou o script. Se é máis infrecuente, só pode escribir un correo electrónico enviado a vostede mesmo.

Recursos Cron adicionais:

Cantos traballos podería automatizar utilizando Cron?

8 Comentarios

  1. 1

    Artigo ben tratado sobre a configuración dun cron, para alguén novo en crojobs, o máis difícil na configuración dun cron é descubrir o intervalo de execución de cronjob e é bastante común obter un intervalo incorrecto ao primeiro intento. Se os teus traballos cronolóxicos son sensibles ao tempo, é bo incluír algúns códigos no script para facer eco do estado, de xeito que te mantiveses informado do estado de execución do traballo.

  2. 2

    Ola Doug,

    Un par de cousas a ter en conta cando se traballa con traballos cron.

    En primeiro lugar, despois dalgunhas ducias, desexarías ter unha interface de usuario, unha base de datos e unha sintaxe de aspecto inglés 😉

    En segundo lugar, cron disparará o traballo á hora especificada, independentemente de se completou a invocación anterior do traballo. Entón, executar un traballo unha vez por minuto que leva 2 minutos levará rapidamente a executar un mesmo traballo.

    A continuación, non hai case ningún informe de erros cando algo falla, polo que terás que engadir o teu propio informe de erros.

    Respondinlles dun par de xeitos:
    - facer que a aplicación se active mediante cron look nunha base de datos para determinar o que hai que executar. Execútalo unha vez por minuto ou hora dependendo do que queiras
    - faga que cada script cree un ficheiro de "bloqueo" en / tmp e, se existe, non comece de novo, isto evita os traballos duplicados se non os quere
    - se o script atopa o ficheiro de bloqueo con máis de 1 hora de duración (ou o que suxira que morreu) envíe unha alerta por correo electrónico
    - que o script envíe un correo electrónico ao fallar o traballo para que saiba que algo fallou
    - mire cadros como Flux ou planificadores comerciais cando as súas necesidades superan algúns scripts

    Chris

  3. 4

    Engadirei tamén que na maioría dos sistemas Linux / Unix, "crontab -e" é o que usa para editar o seu crontab. Creo que o teu servidor (Jumpline) está a usar unha versión modificada por motivos de seguridade.

  4. 5

    Aínda recordo o primeiro día que coñecín a Cronnie. Escoitara cousas sobre ela, que era fiable, sempre a tempo, pero ás veces un pouco confusa sobre as súas intencións.

    Comprobei que isto era certo xa que ela era un misterio para min ao principio. Despois de preguntar por ela, atopeime bastante rápido sobre como lle gustaba operar. Agora, non me imaxino pasar un día sen ela na miña vida. Ela fai o mundano emocionante e levanta moitas cargas dos meus ombreiros.

    En serio, sinto que só rabuñei a superficie co que podo automatizar cos traballos cron. Realmente son o mellor amigo dos desenvolvedores. Se estás a usar alguén como CPanel para xestionar o teu servidor, proporciona unha interface moito máis amigable para crear crons. Completo con menús despregables de minutos, horas, día, mes, etc. que crea a liña cron para vostede.

  5. 7

    Definitivamente vexo que isto é algo que todos os comerciantes deben empregar ... ¿Hai alguén que poida ofrecer este servizo porque soa demasiado "tecnolóxico"?

¿Que pensas?

Este sitio usa Akismet para reducir o spam. Aprende a procesar os teus datos de comentarios.