Manuelle Operationen führen zu menschlichen Fehlern. Das häufige Hinzufügen und Entfernen von Cronjobs kann sehr zeitaufwändig sein. In diesem Artikel erstellen wir Shell-Skripte, die das Hinzufügen und Löschen von Cronjobs von Ubuntu EC2-Instances auf AWS automatisieren. Um diese Vorgänge auszuführen, benötigen Sie Zugriff auf die EC2-Instance. Der Benutzer, den Sie verwenden, muss über sudo-Zugriff verfügen, damit der Benutzer zu root wechseln und Cronjobs hinzufügen und löschen kann.
Fangen wir an.
Voraussetzungen
- Grundlegendes Verständnis von Shell-Skripten und Cronjobs.
- AWS-Konto (erstellen wenn Sie noch keins haben).
- EC2-Instanz mit dem Benutzer mit sudo-Zugriff (Klicken Sie hier, um zu erfahren, wie Sie eine EC2-Instanz erstellen, wenn Sie keine haben oder wenn Sie lernen möchten)
Was werden wir tun
- Erstellen Sie ein Shell-Skript, um Cronjobs hinzuzufügen.
- Führen Sie das Shell-Skript aus, um einen Cronjob hinzuzufügen.
- Erstellen Sie ein Shell-Skript, um Cronjobs zu entfernen.
- Führen Sie das Shell-Skript aus, um den Cronjob zu entfernen.
Erstellen Sie ein Shell-Skript, um Cronjobs hinzuzufügen
Erstellen Sie eine Datei auf Ihrem lokalen Linux-System und fügen Sie den folgenden Code hinzu. Sie finden den Code auch in meinem Github-Repo unter folgendem Link.
Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-add-remove-cron-job/add-cronjob.sh
File: add-cronjob.sh
#!/bin/bash helpFunction() { echo "" printf "\033[1;32mUsage: $0 -K <internal.pem> -U <internal-user> -I <internal-ip> -a <cron-to-be-added>" echo "" echo -e "\t-K \".pem key of the server on which a cron job has to be added\"" echo -e "\t-U UserName of the server on which a cron job has to be added" echo -e "\t-I IP of the server on which a cron job has to be added" echo -e "\t-a Name of the cron to be added (in double quotes)" echo "Add a new Cron Job" echo "e.g." 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" #reset color exit 1 # Exit script after printing help } while getopts "I:K:U:a:" opt do case "$opt" in K ) internalServerPemKey="$OPTARG" ;; U ) internalServerUser="$OPTARG" ;; I ) internalServerIP="$OPTARG" ;; a ) addCron="$OPTARG" ;; ? ) helpFunction ;; # Print helpFunction in case parameter is non-existent esac done echo "******************" #echo $listCronJobs # Print helpFunction in case parameters are empty if [ -z "$internalServerIP" ] || [ -z "$internalServerPemKey" ] || [ -z "$internalServerUser" ] || [ -z "$addCron" ] then printf "\033[1;31m" echo "Some or all of the parameters are empty"; helpFunction fi # Begin script in case all parameters are correct printf "\033[1;33m------------------------------------------------------------------Before ssh" echo -e "\033[0m" #reset color echo ".pem key of the server on which a new user has be created : $internalServerPemKey" echo "UserName of the server on which a new user has be created : $internalServerUser" echo "IP of the server on which a new user has be created : $internalServerIP" echo "Name of the cron to be added : $addCron" printf "\033[1;31mLogging into: "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" ssh -i "$internalServerPemKey" "$internalServerUser"@"$internalServerIP" << HERE printf "\033[1;33m------------------------------------------------------------------After ssh" echo -e "\033[0m" #reset color #echo "Executing connect_prod_cron_new.sh" #sh connect_prod_cron_new.sh #sleep 2 echo "after ssh" echo "IP Of the Server:" hostname -I echo "Hostname of the Server:" hostname echo "Changing user to root" sudo su <><> EOF echo "User Switched To;" whoami printf "\033[1;33m------------------------------------------------------------------List of Cron Jobs Before Addition" 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------------------------------------------------------------------Updated List of Cron Jobs" echo -e "\033[0m" #reset color crontab -l | cat -n printf "\033[1;31mExiting from ---> "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" #echo "Existing user ---> $userName" EOF HERE
Bevor Sie einen neuen Cronjob erstellen, überprüfen Sie, ob die EC2-Instance über vorhandene Cronjobs verfügt
Melden Sie sich bei der EC2-Instanz an und prüfen Sie vorhandene Cronjobs
ssh -i ~/Downloads/howtoforge-test.pem [email protected]
Cronjobs auflisten
crontab -l
Führen Sie das Shell-Skript aus, um einen Cronjob hinzuzufügen
Wechseln Sie zu Ihrem lokalen Linux-Computer und fügen Sie mit dem folgenden Befehl einen Cronjob auf einer Ubuntu 18.04 EC2-Instanz hinzu. Dadurch wird ein Cronjob erstellt, der jede Minute ausgelöst wird und das aktuelle Datum in eine Datei schreibt. Sie können den Cronjob nach Ihren Anforderungen ändern.
./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"
Jetzt können Sie auch zur EC2-Instanz gehen, um zu prüfen, ob der Cronjob hinzugefügt wurde oder nicht.
ssh -i ~/Downloads/howtoforge-test.pem [email protected]
sudo -i
crontab -l
cat /tmp/cron_output
Im folgenden Screenshot sehen Sie, dass der Cronjob jede Minute hinzugefügt und ausgeführt wurde.
Erstellen Sie ein Shell-Skript, um Cronjobs zu entfernen
Wenn Sie jetzt glauben, dass Sie den hinzugefügten Cronjob entfernen müssen, können Sie dies ganz einfach mit dem Shell-Skript tun, das auf meinem Github verfügbar ist.
Erstellen Sie mit dem folgenden Code eine neue Datei auf Ihrem lokalen System.
Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-add-remove-cron-job/remove-cronjob.sh
File: remove-cronjob.sh
#!/bin/bash helpFunction() { echo "" printf "\033[1;32mUsage: $0 -K <internal.pem> -U <internal-user> -I <internal-ip> -l <yes/no>" echo "" echo -e "\t-K \".pem key of the server on which a cron job has to be removed\"" echo -e "\t-U UserName of the server on which a cron job has to be removed" echo -e "\t-I IP of the server on which a cron job has to be removed" echo -e "\t-l List the existing Cron Jobs, provide \"yes\" as a parameter. Get a list first and then specify job no which needs to be removed" echo -e "e.g." echo "Remove a new Cron Job" 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" #reset color exit 1 # Exit script after printing help } while getopts "I:K:U:l:" opt do case "$opt" in K ) internalServerPemKey="$OPTARG" ;; U ) internalServerUser="$OPTARG" ;; I ) internalServerIP="$OPTARG" ;; l ) showListOfJobs="$OPTARG" ;; ? ) helpFunction ;; # Print helpFunction in case parameter is non-existent esac done echo "******************" echo $listCronJobs # Print helpFunction in case parameters are empty if [ -z "$internalServerIP" ] || [ -z "$internalServerPemKey" ] || [ -z "$internalServerUser" ] || [ -z "$showListOfJobs" ] then printf "\033[1;31m" echo "Some or all of the parameters are empty"; helpFunction fi # Begin script in case all parameters are correct printf "\033[1;33m------------------------------------------------------------------Before ssh" echo -e "\033[0m" #reset color echo ".pem key of the server on which a new user has be created : $internalServerPemKey" echo "UserName of the server on which a new user has be created : $internalServerUser" echo "IP of the server on which a new user has be created : $internalServerIP" if [ $showListOfJobs == "yes" ] then printf "\033[1;31mLogging into: "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" ssh -i "$internalServerPemKey" "$internalServerUser"@"$internalServerIP" << HERE printf "\033[1;33m------------------------------------------------------------------After ssh" echo -e "\033[0m" #reset color echo "after ssh" hostname -I hostname echo "Changing user to root" sudo su << EOF echo "User Switched To;" whoami printf "\033[1;33m------------------------------------------------------------------List of Cron Jobs Before Deletion" echo -e "\033[0m" #reset color crontab -l | cat -n printf "\033[1;31mExiting from ---> "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" EOF HERE fi echo "Enter Cron Job Line Number to be removed" read lineNumber printf "\033[1;31mLogging into: "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" ssh -i "$internalServerPemKey" "$internalServerUser"@"$internalServerIP" << HERE printf "\033[1;33m------------------------------------------------------------------After ssh" echo -e "\033[0m" #reset color echo "after ssh" hostname -I hostname #sleep 2 echo "Changing user to root" sudo su << EOF echo "User Switched To;" whoami printf "\033[1;33m------------------------------------------------------------------List of Cron Jobs Before Deletion" echo -e "\033[0m" #reset color crontab -l | cat -n crontab -l | sed -e "$lineNumber"d >crontab.tmp crontab crontab.tmp && rm -f crontab.tmp printf "\033[1;33m------------------------------------------------------------------Updated List of Cron Jobs" echo -e "\033[0m" #reset color crontab -l | cat -n printf "\033[1;31mExiting from ---> "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n" EOF HERE
Führen Sie das Shell-Skript aus, um den Cronjob zu entfernen
Um die Cronjobs zu entfernen, führen Sie das Shell-Skript aus. Es listet alle Cronjobs auf, die auf Ihrer Ubuntu 18.04 EC2-Instanz verfügbar sind. Sie können dann den zu löschenden Job auswählen, das Skript erledigt die Löschung für Sie.
./remove-cronjob.sh -K ~/Downloads/howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -l yes
Jetzt können Sie dasselbe Skript erneut ausführen, um den Cronjob in der EC2-Instanz aufzulisten.
./remove-cronjob.sh -K ~/Downloads/howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -l yes
Sie können den Cronjob auch von der EC2-Instanz selbst überprüfen.
ssh -i ~/Downloads/howtoforge-test.pem [email protected]
sudo -i
crontab -l
Schlussfolgerung
In diesem Artikel haben wir Shell-Skripte zum Hinzufügen und Entfernen von Cronjobs von Ubuntu EC2-Instanzen gesehen. Dies wird dazu beitragen, die manuelle Aufgabe des Hinzufügens oder Entfernens von Cronjobs zu automatisieren und potenzielle menschliche Fehler zu vermeiden, die aufgrund manueller Vorgänge auftreten können.