Os sitios web poden executar tarefas programadas con Cron

reloxo

Traballamos cunha serie de sistemas de supervisió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 realizaron unha compra en 30 días para enviarlles un cupón.

En vez de intentar facer un seguimento de todos estes a man, é moito máis doado crear traballos que se programan 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 proporcionan 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í o aprendín e como o fixen Se Chupar:

  1. Configurei 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 host, 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, pode escribir un correo electrónico enviado a vostede mesmo.

Recursos Cron adicionais:

Cantos traballos podería automatizar utilizando Cron?

8 Comentarios

  1. 1

    Well covered article on setting up a cron, for someone new to crojobs, the most difficult part in setting up a cron is to figure out the cronjob execution interval, and it is quite commong to get a wrong interval at first try. If your cronjobs are time sensitive, it is good to include some codes in the script to echo out status so that you are kept inform of the job execution status.

  2. 2

    Ola Doug,

    A couple of things to consider when working with cron jobs.

    First, after a few dozen, you’ll wish you had a UI, a database and english-looking syntax 😉

    Second, cron will fire the job at the specified time, regardless of whether the previous invocation of the job completed. So running a job once a minute that takes 2 minutes will quickly lead to lots of the same job running.

    Next, there is next to no error reporting when something goes wrong, so you’ll need to add your own error reporting.

    I’ve addressed these in a couple of ways:
    – have the application triggered via cron look in a database to determine what needs to be run. Run it once a minute or hour depending on what you want
    – have each script create a ‘lock’ file in /tmp and if it exists, don’t start again, this prevents duplicate jobs if you don’t want them
    – if the script finds the lock file older than 1 hour (or whatever suggests you died) send an email alert
    – have the script send email on failure of the job so you know something went wrong
    – look at frameworks like Flux or commercial schedulers when your needs get beyond a few scripts

    Chris

  3. 4

    I’ll also add that on most Linux/Unix systems, “crontab -e” is what you use to edit your crontab. I think your host (Jumpline) is using a modified version for security reasons.

  4. 5

    I still remember the first day I met Cronnie. I had heard things about her, that she was dependable, always on time, but sometimes a bit confusing about her intentions.

    I found this to be true as she was a complete mystery to me at first. After asking around about her, I caught on fairly quickly as to how she liked to operate. Now, I can’t imagine a day going by without her in my life. She makes the mundane exciting, and lifts many burdens off my shoulders.

    In all seriousness, I feel like I’ve only scratched the surface with what I can automate with cron jobs. They truly are a developers best friend. If you are using someone like CPanel to manage your server, it provides a much more friendly interface to create crons. Complete with drop down menus for minute, hour, day, month, etc. that builds the cron line for you.

  5. 7

¿Que pensas?

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