web-dev-qa-db-fra.com

Comment écrire un cron qui exécutera un script tous les jours à minuit?

J'ai entendu dire que crontab était un bon choix, mais comment puis-je écrire la ligne et où la placer sur le serveur?

130
Matt Elhotiby

Voici un bon tutoriel sur ce qu'est crontab et comment l'utiliser sur Ubuntu. Votre ligne crontab ressemblera à quelque chose comme ceci:

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

(00 00 indique minuit - 0 minute et 0 heure - et le * signifie tous les jours de chaque mois.)

 Syntaxe: 
 Mm hh jj mt wd commande 
 
 Mm minute 0-59 
 Hh heure 0-23 
 Jj jour du mois 1-31 
 mt mois 1-12 
 jj jour de la semaine 0-7 (dimanche = 0 ou 7) Commande 
: ce que vous voulez exécuter 
 toutes les valeurs numériques peuvent être remplacées par *, ce qui signifie toutes les 
246
Jordan Running

depuis la page de manuel

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

Il est bon de noter les "surnoms" spéciaux qui peuvent être utilisés (documentés dans la page de manuel), en particulier "@reboot" qui n’a pas d’alternative à l’heure et à la date.

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

Vous pouvez également utiliser cette astuce pour exécuter votre travail cron plusieurs fois par minute.

   # 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

Pour ajouter un travail cron, vous pouvez faire l’une des trois choses suivantes:

  1. ajoutez une commande à la crontab d'un utilisateur, comme indiqué ci-dessus (et à partir de la crontab, section 5, page de manuel).

    • éditer la crontab d'un utilisateur en tant que root avec crontab -e -u <username>
    • ou éditez la crontab de l'utilisateur actuel avec juste crontab -e
    • Vous pouvez définir l'éditeur avec la variable d'environnement EDITOR
      • env EDITOR=nano crontab -e -u <username>
      • ou définissez la valeur de EDITOR pour toute votre session Shell
        1. export EDITOR=vim
        2. crontab -e
    • Rendre les scripts exécutables avec chmod a+x <file>


  1. crée un script/programme en tant que tâche cron et l'ajoute aux répertoires anacron /etc/cron.*ly du système

    • anacron /etc/cron.*ly répertoires:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • un péché:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - le rendre exécutable
    • Voir aussi la page de manuel anacron: man anacron
    • Rendre les scripts exécutables avec chmod a+x <file>
    • Quand ce script cron. * Ly est-il exécuté?
      • Pour RHEL/CentOS 5.x, ils sont configurés dans /etc/crontab ou /etc/anacrontab pour s'exécuter à une heure définie.
      • Les systèmes Linux RHEL/CentOS 6.x + et Fedora 17+ ne le définissent que dans /etc/anacrontab et cron.hourly dans /etc/cron.d/0hourly


  1. Ou, on peut créer des crontables système dans /etc/cron.d.

    • La syntaxe crontab décrite précédemment (avec en plus un utilisateur pour exécuter chaque travail en tant que) est placée dans un fichier et le fichier est déposé dans le répertoire /etc/cron.d.
    • Celles-ci sont faciles à gérer dans un package système (par exemple, des packages RPM), elles peuvent donc généralement être spécifiques à une application.
    • La différence de syntaxe réside dans le fait qu'un utilisateur doit être spécifié pour le travail cron après les champs heure/date et avant l'exécution de la commande.
    • Les fichiers ajoutés à /etc/cron.d n'ont pas besoin d'être exécutables.
    • Voici un exemple de travail exécuté en tant qu'utilisateur someuser, et l'utilisation de /bin/bash en tant que shell est forcée.


   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
39
Russell E Glaue

Parfois, vous devrez spécifier PATH et GEM_PATH en utilisant crontab avec rvm.

Comme ça:

# 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
5
LV2014

Guide rapide pour configurer un travail cron

Créez un nouveau fichier texte, exemple: mycronjobs.txt

Enregistrez les échéances dans mycronjobs.txt pour chaque travail quotidien (00:00, 03:45).

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

Envoyez les tâches à cron (chaque fois que vous exécutez ceci, cron supprime ce qui a été stocké et met à jour les nouvelles informations dans mycronjobs.txt )

crontab mycronjobs.txt

Informations utiles supplémentaires

Voir les emplois cron actuels

crontab -l

Supprimer tous les travaux cron

crontab -r
4
dyltini

Vous pouvez exécuter un script shell de deux manières: en utilisant le travail cron ou en écrivant un script shell.

Supposons que votre nom de script est "yourscript.sh"

Commencez par vérifier l'autorisation utilisateur du script. Utilisez la commande ci-dessous pour vérifier les permissions du script.

ll script.sh

Si le script est à la racine, utilisez la commande ci-dessous

Sudo crontab -e

Deuxièmement, si le script contient l'utilisateur "ubuntu", utilisez la commande ci-dessous

crontab -e

Ajoutez la ligne suivante dans votre crontab: -

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

Une autre façon de faire est d’écrire un script et de le lancer en tâche de fond.

Voici le script où vous devez mettre votre nom de script (par exemple: - youscript.sh) qui sera exécuté à 23h55 tous les jours

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

enregistrez-le dans un fichier (nommez-le "every-day.sh")

sleep 1d - signifie qu'il attend un jour puis il s'exécute à nouveau.

donnez maintenant la permission à votre commande script.use ci-dessous: -

chmod + x every-day.sh

maintenant, exécutez ce script Shell en arrière-plan en utilisant "Nohup". Ceci continuera à exécuter le script même après vous être déconnecté de votre session.

utilisez la commande ci-dessous pour exécuter le script.

Nohup ./every-day.sh &

Remarque: - pour exécuter "yourscript.sh" à 23h55 chaque jour, vous devez exécuter le script "every-day.sh" à exactement 23h55.

1
Modassir Haider

Placez cette phrase dans un fichier crontab: 0 0 * * */usr/local/bin/python /opt/ByAccount.py> /var/log/cron.log 2> & 1

0
MAES