Como escrever um cron que executará um script todos os dias à meia-noite?

144

Ouvi dizer que o crontab é uma boa escolha, mas como escrevo a linha e onde a coloco no servidor?

Matt Elhotiby
fonte

Respostas:

261

Aqui está um bom tutorial sobre o que é o crontab e como usá-lo no Ubuntu. Sua linha de crontab será mais ou menos assim:

00 00 * * * ruby path/to/your/script.rb

( 00 00indica meia-noite - 0 minutos e 0 horas - e os *significam todos os dias de cada mês.)

Sintaxe: 
  comando mm hh dd mt wd

  mm minuto 0-59
  hh hora 0-23
  dd dia do mês 1-31
  mt mês 1-12
  wd dia da semana 0-7 (domingo = 0 ou 7)
  comando: o que você deseja executar
  todos os valores numéricos podem ser substituídos por *, o que significa que todos
Jordan Running
fonte
1
Você não sente falta da coluna "executar como usuário"?
Lucas Cimon
4
@LucasCimon A coluna do usuário (que iria antes do comando) é permitida no /etc/crontab(no Ubuntu), mas quando você executa, crontab -evocê está editando um crontab específico do usuário, que não permite esta coluna. O IIRC Ubuntu desencoraja a saída /etc/crontabmanual porque pode ser substituído. Veja aqui: stackoverflow.com/questions/8475694/…
Jordan Running
@ Jordan, então a resposta para o crontab para root ésudo crotab -u root -e
dashesy
40

na página do 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
   ...

É bom observar os "apelidos" especiais que podem ser usados ​​(documentados na página de manual), particularmente o "@reboot", que não tem data e hora alternativas.

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

Você também pode usar esse truque para executar seu trabalho cron várias vezes 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 adicionar um trabalho cron, você pode fazer uma de três coisas:

  1. adicione um comando ao crontab de um usuário, como mostrado acima (e no crontab, seção 5, página de manual).

    • edite o crontab de um usuário como root com crontab -e -u <username>
    • ou edite o crontab do usuário atual com apenas crontab -e
    • Você pode definir o editor com a EDITORvariável de ambiente
      • env EDITOR=nano crontab -e -u <username>
      • ou defina o valor de EDITOR para toda a sua sessão de shell
        1. export EDITOR=vim
        2. crontab -e
    • Tornar scripts executáveis ​​com chmod a+x <file>


  1. crie um script / programa como um trabalho cron e adicione-o aos /etc/cron.*lydiretórios anacron do sistema

    • diretórios anacron /etc/cron.*ly:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • como em:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - torná-lo executável
    • Veja também a página de manual anacron: man anacron
    • Tornar scripts executáveis ​​com chmod a+x <file>
    • Quando esses scripts cron. * Ly são executados?
      • Para o RHEL / CentOS 5.x, eles são configurados /etc/crontabou /etc/anacrontabexecutados em um horário definido
      • Os sistemas RHEL / CentOS 6.x + e Fedora 17+ Linux apenas definem isso /etc/anacrontabe definem cron.hourly em/etc/cron.d/0hourly


  1. Ou, pode-se criar crontables do sistema /etc/cron.d.

    • A sintaxe crontab descrita anteriormente (com o fornecimento adicional de um usuário para executar cada tarefa como) é colocada em um arquivo, e o arquivo é descartado no diretório /etc/cron.d.
    • Eles são fáceis de gerenciar no empacotamento do sistema (por exemplo, pacotes RPM); portanto, geralmente podem ser específicos do aplicativo.
    • A diferença de sintaxe é que um usuário deve ser especificado para o trabalho cron após os campos de hora / data e antes do comando ser executado.
    • Os arquivos adicionados ao /etc/cron.dnão precisam ser executáveis.
    • Aqui está um exemplo de trabalho que é executado como usuário someusere o uso de /bin/bashcomo o shell é forçado.


   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
Russell E Glaue
fonte
5

Às vezes, você precisará especificar PATH e GEM_PATH usando o crontab com rvm.

Como isso:

# 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
LV2014
fonte
4

Guia rápido para configurar um trabalho cron

Crie um novo arquivo de texto, por exemplo: mycronjobs.txt

Para cada trabalho diário (00:00, 03:45), salve as linhas de programação em mycronjobs.txt

00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh

Envie as tarefas para o cron (sempre que você executa isso, o cron exclui o que foi armazenado e é atualizado com as novas informações em mycronjobs.txt )

crontab mycronjobs.txt

Informações Úteis Extra

Ver trabalhos cron atuais

crontab -l

Remova todos os trabalhos cron

crontab -r
dyltini
fonte
Sua sintaxe do crontab está incorreta para 03:45. Os campos do crontab são Minuto e Hora, ou seja, "45 03" - você o tem ao contrário em sua postagem.
Russell E Glaue 14/10
1

Você pode executar o shell script de duas maneiras, usando a tarefa cron ou escrevendo um shell script

Vamos supor que o nome do seu script seja "herscript.sh"

Primeiro verifique a permissão do usuário do script. use o comando abaixo para verificar a permissão do usuário do script

ll script.sh

Se o script estiver na raiz, use o comando abaixo

sudo crontab -e

Segundo, se o script contiver o usuário "ubuntu", use o comando abaixo

crontab -e

Adicione a seguinte linha no seu crontab: -

55 23 * * * /path/to/yourscript.sh

Outra maneira de fazer isso é escrever um script e executá-lo no backgroud

Aqui está o script no qual você deve colocar o nome do script (por exemplo: - youscript.sh), que será executado às 23:55 todos os dias

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

salve-o em um arquivo (vamos chamá-lo de "todos os dias.sh")

sleep 1d - significa que aguarda um dia e depois roda novamente.

Agora, dê a permissão para o seu script.use abaixo do comando: -

chmod + x todos os dias.sh

agora, execute esse shell script em segundo plano usando "nohup". Isso continuará executando o script mesmo após o logout da sua sessão.

use o comando abaixo para executar o script.

nohup ./every-day.sh &

Nota: - para executar "YOURScript.sh" às 23:55 todos os dias, é necessário executar o script "every-day.sh" exatamente às 23:55.

Modassir Haider
fonte
0

Coloque esta frase em um arquivo crontab: 0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

MAES
fonte