Les opérations manuelles entraînent des erreurs humaines. L'ajout et la suppression fréquents de Cronjobs peuvent être une tâche très chronophage. Dans cet article, nous allons créer des scripts Shell qui automatisent l'ajout et la suppression de Cronjobs à partir d'instances Ubuntu EC2 sur AWS. Pour effectuer ces opérations, vous aurez besoin d'accéder à l'instance EC2. L'utilisateur que vous utiliserez doit avoir un accès sudo afin que l'utilisateur puisse passer à la racine et effectuer l'ajout et la suppression de Cronjobs.
Commençons.
Pré-requis
- Compréhension de base des scripts Shell et des tâches Cron.
- Compte AWS (créez si vous n'en avez pas).
- Instance EC2 avec l'utilisateur ayant un accès sudo (Cliquez ici pour apprendre à créer une instance EC2 si vous n'en avez pas ou si vous voulez apprendre)
Qu'allons-nous faire
- Créez un script shell pour ajouter des Cronjobs.
- Exécutez le script Shell pour ajouter un Cronjob.
- Créez un script shell pour supprimer les tâches cron.
- Exécutez le script Shell pour supprimer la tâche Cron.
Créer un script shell pour ajouter des Cronjobs
Créez un fichier sur votre système Linux local et ajoutez-y le code suivant. Vous pouvez également trouver le code sur mon dépôt Github sur le lien suivant.
Lien Github : https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-add-remove-cron-job/add-cronjob.sh
Fichier : add-cronjob.sh
#!/bin/bashhelpFunction(){ echo "" printf "\033[1;32mUtilisation :$0 -K-U -I -a " echo "" echo -e "\t-K \".pem clé du serveur sur lequel une tâche cron doit être ajoutée\"" echo -e "\t-U UserName du serveur sur lequel un cron doit être ajouté" echo -e "\t-I IP du serveur sur lequel un cron doit être ajouté" echo -e "\t-a Nom du cron à ajouter (entre guillemets doubles)" echo "Ajouter un nouvelle tâche Cron" echo "par exemple" echo "./add-cronjob.sh -K /Users/cloudcover/Documents/Rahul/access/rahuls.pem -U ubuntu -I ec2-35-180-234-158.eu-west-3.compute.amazonaws. com -a \"0 5 * * 1 testCronJob\"" echo -e "\033[0m" #réinitialiser la couleur exit 1 # Quitter le script après avoir imprimé l'aide}while getopts "I:K:U:a:" optdo case " $opt" dans K ) internalServerPemKey="$OPTARG" ;; U ) internalServerUser="$OPTARG";; I ) internalServerIP="$OPTARG";; a ) addCron="$OPTARG";; ? ) helpFunction;; # Affiche la fonction d'aide si le paramètre est inexistant esacdoneecho "*******************"#echo $listCronJobs# Affiche la fonction d'aide si les paramètres sont videsif [ -z "$internalServerIP" ] || [ -z "$internalServerPemKey" ] || [ -z "$utilisateurserveurinterne" ] || [ -z "$addCron" ]then printf "\033[1;31m" echo "Certains ou tous les paramètres sont vides" ; helpFunctionfi# Commencer le script si tous les paramètres sont correctsprintf "\033[1;33m-------------------------------- ---------------------------------Avant ssh"echo -e "\033[0m" #reset colorecho ". pem clé du serveur sur lequel un nouvel utilisateur a été créé :$internalServerPemKey"echo "UserName du serveur sur lequel un nouvel utilisateur a été créé :$internalServerUser"echo "IP du serveur sur lequel un nouvel utilisateur a été créé :$internalServerIP"echo "Nom du cron à ajouter :$addCron"printf "\033[1;31mConnexion à :"$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n"ssh -i " $internalServerPemKey" "$internalServerUser"@"$internalServerIP" < <> EOF echo "Utilisateur commuté sur ;" whoami printf "\033[1;33m----------------------------------------- --------------------Liste des tâches Cron avant l'ajout" echo -e "\033[0m" #reset color crontab -l | cat -n if [ -n "$addCron" ] then echo "Inside addCron" crontab -l>crontab.tmp printf '%s\n' "$addCron">>crontab.tmp crontab crontab.tmp &&rm -f crontab .tmp fi printf "\033[1;33m-------------------------------------------------------- ---------------------------Liste mise à jour des tâches Cron" echo -e "\033[0m" #reset color crontab -l | cat -n printf "\033[1;31mSortie de ---> "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" #echo "Utilisateur existant ---> $userName"EOFHERE Avant de créer un nouveau Cronjob, vérifiez si l'instance EC2 a des Cronjobs existants
Connectez-vous à l'instance EC2 et vérifiez les Cronjobs existants
ssh -i ~/Downloads/howtoforge-test.pem [email protected]Lister les Cronjobs
crontab -lExécuter le script Shell pour ajouter un Cronjob
Accédez à votre machine Linux locale et ajoutez un Cronjob sur l'instance EC2 Ubuntu 18.04 à l'aide de la commande suivante. Cela créera un Cronjob qui sera déclenché toutes les minutes et écrira la date actuelle dans un fichier. Vous pouvez modifier le Cronjob selon vos besoins.
./add-cronjob.sh -K ~/Downloads/howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -a " * * * * * /bin/date>> /tmp/cron_output"
Désormais, vous pouvez également accéder à l'instance EC2 pour vérifier si le Cronjob a été ajouté ou non.
ssh -i ~/Downloads/howtoforge-test.pem [email protected]sudo -icrontab -lcat /tmp/cron_outputDans la capture d'écran suivante, vous pouvez voir que le Cronjob a été ajouté et exécuté toutes les minutes.
Créer un script shell pour supprimer Cronjobs
Maintenant, si vous pensez devoir supprimer le Cronjob que vous avez ajouté, vous pouvez facilement le faire en utilisant le script shell disponible sur mon Github.
Créez un nouveau fichier sur votre système local avec le code suivant.
Lien Github : https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-add-remove-cron-job/remove-cronjob.shFichier : remove-cronjob.sh#!/bin/bashhelpFunction(){ echo "" printf "\033[1;32mUtilisation :$0 -K-U -I -l " echo "" echo -e "\t-K \".pem clé du serveur sur lequel une tâche cron doit être supprimée\"" echo -e "\t-U UserName du serveur sur lequel une tâche cron doit être supprimée être supprimé" echo -e "\t-I IP du serveur sur lequel un travail cron doit être supprimé" echo -e "\t-l Liste les travaux cron existants, fournissez \"oui\" comme paramètre. Obtenez d'abord une liste et puis spécifiez le numéro de travail qui doit être supprimé" echo -e "par exemple" echo "Supprimer une nouvelle tâche Cron" echo "./remove-cronjob.sh -K /Users/cloudcover/Documents/Rahul/access/rahuls.pem -U ubuntu -I ec2-52-47-90-247.eu- west-3.compute.amazonaws.com -l yes" echo -e "\033[0m" #réinitialiser la couleur exit 1 # Quitter le script après avoir imprimé l'aide}while getopts "I:K:U:l:" optdo case "$ opt" dans K ) internalServerPemKey="$OPTARG" ;; U ) internalServerUser="$OPTARG";; I ) internalServerIP="$OPTARG";; l ) showListOfJobs="$OPTARG";; ? ) helpFunction;; # Affiche la fonction d'aide si le paramètre est inexistant esacdoneecho "*******************" echo $listCronJobs# Affiche la fonction d'aide si les paramètres sont vides si [ -z "$internalServerIP" ] || [ -z "$internalServerPemKey" ] || [ -z "$utilisateurserveurinterne" ] || [ -z "$showListOfJobs" ]then printf "\033[1;31m" echo "Certains ou tous les paramètres sont vides" ; helpFunctionfi# Commencer le script si tous les paramètres sont correctsprintf "\033[1;33m-------------------------------- ---------------------------------Avant ssh"echo -e "\033[0m" #reset colorecho ". pem clé du serveur sur lequel un nouvel utilisateur a été créé :$internalServerPemKey"echo "UserName du serveur sur lequel un nouvel utilisateur a été créé :$internalServerUser"echo "IP du serveur sur lequel un nouvel utilisateur a été créé :$internalServerIP"if [ $showListOfJobs =="yes" ]then printf "\033[1;31mConnexion à :"$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" ssh -i "$internalServerPemKey" " "$internalServerUser"@"$internalServerIP" < "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n"EOFHEREfiecho "Entrez le numéro de ligne de la tâche Cron à supprimer"lire lineNumberprintf " \033[1;31mConnexion à :"$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n"ssh -i "$internalServerPemKey" "$internalServerUser"@"$internalServerIP" < crontab.tmp crontab crontab.tmp &&rm -f crontab.tmp printf "\033[1;33m------------------- -----------------------------------------------Liste mise à jour des Cron Jobs" echo -e "\033[0m" #reset color crontab -l | cat -n printf "\033[1;31mSortie de ---> "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n"EOFICI
Exécuter le script Shell pour supprimer le Cronjob
Pour supprimer les Cronjobs, exécutez le script shell. Il listera tous les Cronjob disponibles sur votre instance Ubuntu 18.04 EC2. Vous pouvez ensuite sélectionner le travail à supprimer, le script effectuera la suppression pour vous.
./remove-cronjob.sh -K ~/Downloads/howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -l yes
Maintenant, vous pouvez exécuter à nouveau le même script pour répertorier le Cronjob dans l'instance EC2.
./remove-cronjob.sh -K ~/Downloads/howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -l yes
Vous pouvez également vérifier le Cronjob à partir de l'instance EC2 elle-même.
ssh -i ~/Downloads/howtoforge-test.pem [email protected]sudo -icrontab -l
Conclusion
Dans cet article, nous avons vu des scripts Shell pour ajouter et supprimer des Cronjobs de l'instance Ubuntu EC2. Cela aidera à automatiser la tâche manuelle d'ajout ou de suppression de Cronjobs et évitera également les erreurs humaines potentielles pouvant survenir en raison d'opérations manuelles.