GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Anleitung zum Hinzufügen und Entfernen von Cronjobs von Linux EC2-Instanzen auf AWS mithilfe von Shell-Skripten

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

  1. Grundlegendes Verständnis von Shell-Skripten und Cronjobs.
  2. AWS-Konto (erstellen wenn Sie noch keins haben).
  3. 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

  1. Erstellen Sie ein Shell-Skript, um Cronjobs hinzuzufügen.
  2. Führen Sie das Shell-Skript aus, um einen Cronjob hinzuzufügen.
  3. Erstellen Sie ein Shell-Skript, um Cronjobs zu entfernen.
  4. 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.


Linux
  1. So fügen Sie einen Benutzer zu einer Gruppe in Linux hinzu oder entfernen ihn

  2. So installieren Sie MongoDB von der Quelle (und mit YUM) unter Linux

  3. Wie extrahieren Sie IP-Adressen aus Dateien mit einem Regex in einer Linux-Shell?

  4. So prüfen Sie, ob eine Gruppe vorhanden ist, und fügen sie hinzu, wenn dies nicht der Fall ist, in Linux Shell Script

  5. Wie entferne ich eine Zeichenfolge aus einer Datei über Shell-Skripte?

So erstellen Sie einen Benutzer auf einer Linux-EC2-Instance auf AWS und fügen ihm mithilfe eines Shell-Skripts einen öffentlichen Schlüssel hinzu

So entfernen Sie Programme, die mit GNU Stow in Linux aus der Quelle installiert wurden

So entfernen Sie einen Befehl aus dem Verlauf in Linux

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

So überwachen Sie Linux-Server und Metriken vom Browser aus mit Scout Realtime

So installieren und verwenden Sie Nu Shell unter Linux