Поиск по сайту:

Как добавлять и удалять Cronjobs из инстансов Linux EC2 на AWS с помощью сценариев оболочки


На этой странице

  1. Предварительные условия
  2. Что мы будем делать
  3. Создайте сценарий оболочки, чтобы добавить Cronjobs.
  4. Выполните сценарий оболочки, чтобы добавить задание Cron.
  5. Создайте сценарий оболочки для удаления Cronjobs.
  6. Выполните сценарий оболочки, чтобы удалить задание Cron.
  7. Заключение

Ручные операции приводят к человеческим ошибкам. Частое добавление и удаление Cronjobs может отнимать очень много времени. В этой статье мы создадим сценарии оболочки, которые автоматизируют добавление и удаление заданий Cron из экземпляров Ubuntu EC2 на AWS. Для выполнения этих операций вам потребуется доступ к экземпляру EC2. Пользователь, которого вы будете использовать, должен иметь доступ к sudo, чтобы пользователь мог переключиться на root и выполнять добавление и удаление заданий Cron.

Давайте начнем.

Предпосылки

  1. Основное понимание скриптов Shell и Cronjobs.
  2. Аккаунт AWS (создайте, если у вас его нет).
  3. Экземпляр EC2 с пользователем, имеющим доступ к sudo (Нажмите здесь, чтобы узнать, как создать экземпляр EC2, если у вас его нет или вы хотите научиться )

Что мы будем делать

  1. Создайте сценарий оболочки, чтобы добавить Cronjobs.
  2. Выполните сценарий оболочки, чтобы добавить задание Cron.
  3. Создайте сценарий оболочки для удаления Cronjobs.
  4. Выполните сценарий оболочки, чтобы удалить задание Cron.

Создайте сценарий оболочки, чтобы добавить задания Cronjob.

Создайте файл в локальной системе Linux и добавьте в него следующий код. Вы также можете найти код в моем репозитории Github по следующей ссылке.

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

Прежде чем создавать новое задание Cron, проверьте, есть ли в экземпляре EC2 какие-либо существующие задания Cron.

Войдите в экземпляр EC2 и проверьте существующие Cronjobs.

ssh -i ~/Downloads/howtoforge-test.pem 

Список Cronjobs

crontab -l

Выполните сценарий оболочки, чтобы добавить Cronjob.

Перейдите на свой локальный компьютер с Linux и добавьте Cronjob в экземпляр Ubuntu 18.04 EC2, используя следующую команду. Это создаст Cronjob, который будет запускаться каждую минуту и записывать текущую дату в файл. Вы можете изменить Cronjob в соответствии с вашими требованиями.

./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"

Теперь вы также можете перейти к экземпляру EC2, чтобы проверить, был ли добавлен Cronjob или нет.

ssh -i ~/Downloads/howtoforge-test.pem 
sudo -i
crontab -l
cat /tmp/cron_output

На следующем снимке экрана видно, что Cronjob добавляется и выполняется каждую минуту.

Создайте сценарий оболочки для удаления Cronjobs

Теперь, если вы считаете, что вам нужно удалить добавленный вами Cronjob, вы можете легко сделать это с помощью сценария оболочки, доступного на моем Github.

Создайте новый файл в локальной системе со следующим кодом.

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

Выполните сценарий оболочки, чтобы удалить Cronjob.

Чтобы удалить Cronjobs, выполните сценарий оболочки. В нем будут перечислены все Cronjob, доступные в вашем экземпляре Ubuntu 18.04 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

Теперь вы можете снова выполнить тот же скрипт, чтобы вывести Cronjob в экземпляр 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

Вы также можете проверить Cronjob из самого экземпляра EC2.

ssh -i ~/Downloads/howtoforge-test.pem 
sudo -i
crontab -l

Заключение

В этой статье мы видели сценарии Shell для добавления и удаления Cronjobs из экземпляра Ubuntu EC2. Это поможет автоматизировать ручную задачу по добавлению или удалению Cronjobs, а также избежать потенциальных человеческих ошибок, которые могут возникнуть из-за ручных операций.