J'ai entendu dire que crontab est un bon choix, mais comment écrire la ligne et où la placer sur le serveur?
J'ai entendu dire que crontab est un bon choix, mais comment écrire la ligne et où la placer sur le serveur?
Réponses:
Voici un bon tutoriel sur ce qu'est crontab et comment l'utiliser sur Ubuntu. Votre ligne crontab ressemblera à ceci:
00 00 * * * ruby path/to/your/script.rb
( 00 00
indique minuit - 0 minute et 0 heure - et le *
s signifie tous les jours de chaque mois.)
Syntaxe: commande mm hh dd mt wd mm minute 0-59 hh heure 0-23 jj jour du mois 1-31 mois mois 1-12 wd 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 tout
/etc/crontab
(sur Ubuntu), mais lorsque vous exécutez, crontab -e
vous modifiez un crontab spécifique à l'utilisateur, ce qui n'autorise pas cette colonne. IIRC Ubuntu déconseille de quitter /etc/crontab
manuellement car il peut être écrasé. Voir ici: stackoverflow.com/questions/8475694/…
sudo crotab -u root -e
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 tâche 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 une tâche cron, vous pouvez effectuer l'une des trois opérations suivantes:
ajoutez une commande à la crontab d'un utilisateur, comme indiqué ci-dessus (et à partir de la crontab, section 5, page de manuel).
crontab -e -u <username>
crontab -e
EDITOR
variable d'environnement
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
créer un script / programme en tant que tâche cron et l'ajouter aux /etc/cron.*ly
répertoires anacron du système
chmod a+x /etc/cron.daily/script_runs_daily.sh
- le rendre exécutableman anacron
chmod a+x <file>
/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.someuser
, et l'utilisation de /bin/bash
comme 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
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
Guide rapide pour configurer une tâche cron
Créez un nouveau fichier texte, exemple: mycronjobs.txt
Pour chaque tâche quotidienne (00:00, 03:45), enregistrez les échéances dans mycronjobs.txt
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
Envoyez les travaux à 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 emplois cron actuels
crontab -l
Supprimer toutes les tâches cron
crontab -r
Vous pouvez exécuter un script shell de deux manières, soit en utilisant le travail cron, soit en écrivant un script shell
Supposons que le nom de votre script soit "yourscript.sh"
Vérifiez d'abord l'autorisation utilisateur du script. utilisez la commande ci-dessous pour vérifier l'autorisation utilisateur du script
ll script.sh
Si le script est en 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 * * * /chemin/vers/votrescript.sh
Une autre façon de faire est d'écrire un script et de l'exécuter dans le backgroud
Voici le script où vous devez mettre votre nom de script (par exemple: - youscript.sh) qui va s'exécuter à 23h55 tous les jours
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
enregistrez-le dans un fichier (appelons-le "tous les jours.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 tous les jours.sh
maintenant, exécutez ce script shell en arrière-plan en utilisant "nohup". Cela continuera à exécuter le script même après la déconnexion de votre session.
utilisez la commande ci-dessous pour exécuter le script.
nohup ./every-day.sh &
Remarque: - pour exécuter "yourscript.sh" à 23h55 tous les jours, vous devez exécuter le script "every-day.sh" à exactement 23h55.