Come scrivere un cron che eseguirà uno script ogni giorno a mezzanotte?


144

Ho sentito che crontab è una buona scelta, ma come faccio a scrivere la linea e dove la metto sul server?

Risposte:


261

Ecco un buon tutorial su cos'è crontab e su come usarlo su Ubuntu. La tua linea crontab sarà simile a questa:

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

( 00 00indica la mezzanotte - 0 minuti e 0 ore - e la *s significa ogni giorno di ogni mese).

Sintassi: 
  mm hh dd mt wd comando

  mm minuto 0-59
  ora 0-23
  giorno del giorno 1-31
  mt mese 1-12
  wd giorno della settimana 0-7 (domenica = 0 o 7)
  comando: cosa vuoi eseguire
  tutti i valori numerici possono essere sostituiti da * che significa tutto

1
Non ti perdi la colonna "run-as-user"?
Lucas Cimon,

4
@LucasCimon La colonna utente (che andrebbe prima del comando) è consentita in /etc/crontab(su Ubuntu), ma quando esegui crontab -estai modificando un crontab specifico dell'utente, che non consente questa colonna. Ubuntu IIRC scoraggia l'uscita /etc/crontabmanuale perché potrebbe essere sovrascritto. Vedi qui: stackoverflow.com/questions/8475694/…
Giordania in esecuzione il

@Jordan, quindi la risposta a crontab per root èsudo crotab -u root -e
preciso il

40

dalla pagina man

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
   ...

È bene notare gli speciali "soprannomi" che possono essere utilizzati (documentati nella pagina man), in particolare "@reboot" che non ha alternative di data e ora.

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

Puoi anche usare questo trucco per eseguire il tuo lavoro cron più volte al 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

Per aggiungere un lavoro cron, puoi fare una delle tre cose:

  1. aggiungi un comando al crontab di un utente, come mostrato sopra (e dal crontab, sezione 5, pagina man).

    • modifica crontab di un utente come root con crontab -e -u <username>
    • o modifica il crontab dell'utente corrente con just crontab -e
    • È possibile impostare l'editor con la EDITORvariabile di ambiente
      • env EDITOR=nano crontab -e -u <username>
      • oppure imposta il valore di EDITOR per l'intera sessione della shell
        1. export EDITOR=vim
        2. crontab -e
    • Rendi gli script eseguibili con chmod a+x <file>


  1. creare uno script / programma come cron job e aggiungerlo alle /etc/cron.*lydirectory anacron del sistema

    • directory anacron /etc/cron.*ly:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • come in:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - renderlo eseguibile
    • Vedi anche la pagina man di anacron: man anacron
    • Rendi gli script eseguibili con chmod a+x <file>
    • Quando vengono eseguiti questi cron. * Ly script?
      • Per RHEL / CentOS 5.x, sono configurati in /etc/crontabo /etc/anacrontabper essere eseguiti a un'ora prestabilita
      • I sistemi RHEL / CentOS 6.x + e Fedora 17+ Linux lo definiscono solo /etc/anacrontabe definiscono cron.hourly/etc/cron.d/0hourly


  1. Oppure, Uno può creare crontable di sistema in /etc/cron.d.

    • La sintassi crontab precedentemente descritta (fornendo inoltre un utente per eseguire ciascun lavoro come) viene inserita in un file e il file viene rilasciato nella directory /etc/cron.d.
    • Questi sono facili da gestire nella confezione del sistema (ad es. Pacchetti RPM), quindi potrebbero essere specifici dell'applicazione.
    • La differenza di sintassi è che un utente deve essere specificato per il processo cron dopo i campi ora / data e prima dell'esecuzione del comando.
    • /etc/cron.dNon è necessario che i file aggiunti siano eseguibili.
    • Ecco un lavoro di esempio che viene eseguito come utente someusere l'uso di /bin/bashcome shell è forzato.


   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

5

A volte dovrai specificare PATH e GEM_PATH usando crontab con rvm.

Come questo:

# 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

4

Guida rapida per l'impostazione di un processo cron

Crea un nuovo file di testo, ad esempio mycronjobs.txt

Per ogni lavoro giornaliero (00:00, 03:45), salvare le righe del programma in mycronjobs.txt

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

Invia i lavori a cron (ogni volta che esegui questo, cron cancella ciò che è stato memorizzato e aggiorna con le nuove informazioni in mycronjobs.txt )

crontab mycronjobs.txt

Ulteriori informazioni utili

Vedi i lavori cron correnti

crontab -l

Rimuovi tutti i lavori cron

crontab -r

La sintassi di crontab non è corretta per 03:45. I campi crontab sono Minuti quindi Ora, ad esempio "45 03" - ce l'hai all'indietro nel tuo post.
Russell E Glaue,

1

È possibile eseguire lo script di shell in due modi, utilizzando cron job o scrivendo uno script di shell

Supponiamo che il nome del tuo script sia "yourscript.sh"

Prima controlla l'autorizzazione dell'utente dello script. utilizzare il comando seguente per verificare l'autorizzazione dell'utente dello script

ll script.sh

Se lo script è nella radice, utilizzare il comando seguente

sudo crontab -e

Secondo se lo script contiene l'utente "Ubuntu", quindi usa il comando seguente

crontab -e

Aggiungi la seguente riga nel tuo crontab: -

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

Un altro modo per farlo è scrivere una sceneggiatura ed eseguirla nel backgroud

Ecco lo script in cui devi inserire il nome del tuo script (ad esempio: - youscript.sh) che verrà eseguito ogni giorno alle 23:55

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

salvalo in un file (chiamiamolo "every-day.sh")

sleep 1d - significa che attende un giorno e quindi viene eseguito nuovamente.

ora dai il permesso al tuo script.use sotto il comando: -

chmod + x every-day.sh

ora, esegui questo script di shell in background usando "nohup". Ciò continuerà a eseguire lo script anche dopo la disconnessione dalla sessione.

utilizzare il comando seguente per eseguire lo script.

nohup ./every-day.sh &

Nota: - per eseguire "yourscript.sh" ogni giorno alle 23:55, è necessario eseguire lo script "every-day.sh" esattamente alle 23:55.


0

Inserisci questa frase in un file crontab: 0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.