J'ai entendu dire que crontab est un bon choix, mais comment écrire la ligne et où dois-je la placer sur le serveur ?
Ne vous manque-t-il pas la colonne 'run-as-user' ?
J'ai entendu dire que crontab est un bon choix, mais comment écrire la ligne et où dois-je la placer sur le serveur ?
Voici un bon tutoriel sur ce qu'est le crontab et comment l'utiliser sur Ubuntu. Votre ligne de crontab ressemblera à ceci :
00 00 * * * ruby chemin/vers/votre/script.rb
(00 00
indique minuit - 0 minute et 0 heure - et les *
signifient tous les jours de chaque mois.)
Syntaxe :
mm hh jj mt jj 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 tous
@LucasCimon La colonne utilisateur (qui doit être placée avant la commande) est autorisée dans /etc/crontab
(sur Ubuntu), mais lorsque vous exécutez crontab -e
vous éditez un crontab spécifique à l'utilisateur, qui ne permet pas cette colonne. Il me semble qu'Ubuntu décourage de modifier /etc/crontab
manuellement car cela pourrait être écrasé. Voir ici : stackoverflow.com/questions/8475694/…
À partir de la page de manuel
linux$ man -S 5 crontab
cron(8) examine les entrées de cron une fois par minute.
Les champs d'heure et de date sont:
champ valeurs autorisées
----- --------------
minute 0-59
heure 0-23
jour du mois 1-31
mois 1-12 (ou les noms, voir ci-dessous)
jour de la semaine 0-7 (0 ou 7 = dimanche, ou utiliser les noms)
...
# s'exécute cinq minutes après minuit, tous les jours
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 temporelle ou de date.
# S'exécute une fois après le démarrage.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
Vous pouvez également utiliser cette astuce pour exécuter votre tâche cron plusieurs fois par minute.
# S'exécute chaque minute aux intervalles de 0, 20 et 40 secondes
* * * * * 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 une tâche cron, vous pouvez faire l'une des trois choses suivantes:
ajouter une commande à la crontab d'un utilisateur, comme indiqué ci-dessus (et à partir de la page de manuel de crontab, section 5).
crontab -e -u
crontab -e
EDITOR
env EDITOR=nano crontab -e -u
export EDITOR=vim
crontab -e
chmod a+x
*créez un script/programme en tant que tâche cron, et ajoutez-le aux répertoires anacron du système `/etc/cron.ly`**
/etc/cron.*ly
:
chmod a+x /etc/cron.daily/script_runs_daily.sh
-- le rendre exécutableman anacron
chmod a+x
/etc/crontab
ou /etc/anacrontab
pour s'exécuter à une heure définie/etc/anacrontab
, et définissent cron.hourly dans /etc/cron.d/0hourly
Ou, on peut créer des crontables système dans /etc/cron.d
.
/etc/cron.d
n'ont pas besoin d'être exécutables.Voici un exemple de tâche qui est exécutée en tant qu'utilisateur someuser
, et l'utilisation de /bin/bash
comme shell est forcée.
Fichier : /etc/cron.d/myapp-cron
SHELL=/bin/bash
00 23 * someuser /opt/myapp/bin/scrubrecords.php
Guide rapide pour configurer une tâche cron
Créez un nouveau fichier texte, par exemple : mycronjobs.txt
Pour chaque tâche quotidienne (00:00, 03:45), enregistrez les lignes de planification dans mycronjobs.txt
00 00 * * * ruby chemin/vers/votre/script.rb
45 03 * * * chemin/vers/votre/script2.sh
Envoyez les tâches à cron (à chaque fois que vous exécutez ceci, cron supprime ce qui a été stocké et met à jour avec les nouvelles informations dans mycronjobs.txt)
crontab mycronjobs.txt
Informations supplémentaires utiles
Voir les tâches cron actuelles
crontab -l
Supprimer toutes les tâches cron
crontab -r
Parfois, vous devrez spécifier le CHEMIN et le GEM_PATH en utilisant crontab avec rvm.
Comme ceci:
# haut du fichier crontab
CHEMIN=/home/nom_utilisateur/.rvm/gems/ruby-2.2.0/bin:/home/nom_utilisateur/.rvm/gems/ruby-2.2.0@global/bin:/home/nom_utilisateur/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/nom_utilisateur/.rvm/gems/ruby-2.2.0:/home/nom_utilisateur/.rvm/gems/ruby-2.2.0@global
# tâches
00 00 * * * ruby chemin/vers/votre/script.rb
00 */4 * * * ruby chemin/vers/votre/script2.rb
00 8,12,22 * * * ruby chemin/vers/votre/script3.rb
Vous pouvez exécuter un script shell de deux manières, soit en utilisant une tâche cron, soit en écrivant un script shell
Supposons que le nom de votre script est "votrescript.sh"
Vérifiez d'abord l'autorisation de l'utilisateur du script. utilisez la commande ci-dessous pour vérifier l'autorisation de l'utilisateur du script
ll script.sh
Si le script est en root, utilisez la commande ci-dessous
sudo crontab -e
Deuxièmement, si le script appartient à l'utilisateur "ubuntu", utilisez la commande ci-dessous
crontab -e
Ajoutez la ligne suivante dans votre crontab :
55 23 * * * /chemin/vers/votrescript.sh
Une autre façon de faire est d'écrire un script et de l'exécuter en arrière-plan
Voici le script où vous devez mettre le nom de votre script (par exemple : votrescript.sh) qui va s'exécuter à 23h55 tous les jours
#!/bin/bash while true do /home/modassir/votrescript.sh sleep 1d done
enregistrez-le dans un fichier (appelons-le "chaque-jour.sh")
sleep 1d - cela signifie qu'il attend un jour puis s'exécute à nouveau.
maintenant donnez l'autorisation à votre script. utilisez la commande ci-dessous :
chmod +x chaque-jour.sh
maintenant, exécutez ce script shell en arrière-plan en utilisant "nohup". Cela continuera d'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 ./chaque-jour.sh &
Note : pour exécuter "votrescript.sh" à 23h55 tous les jours, vous devez exécuter le script "chaque-jour.sh" exactement à 23h55.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.