Как добавлять и удалять Cronjobs из инстансов Linux EC2 на AWS с помощью сценариев оболочки
На этой странице
- Предварительные условия
- Что мы будем делать
- Создайте сценарий оболочки, чтобы добавить Cronjobs.
- Выполните сценарий оболочки, чтобы добавить задание Cron.
- Создайте сценарий оболочки для удаления Cronjobs.
- Выполните сценарий оболочки, чтобы удалить задание Cron.
- Заключение
Ручные операции приводят к человеческим ошибкам. Частое добавление и удаление Cronjobs может отнимать очень много времени. В этой статье мы создадим сценарии оболочки, которые автоматизируют добавление и удаление заданий Cron из экземпляров Ubuntu EC2 на AWS. Для выполнения этих операций вам потребуется доступ к экземпляру EC2. Пользователь, которого вы будете использовать, должен иметь доступ к sudo, чтобы пользователь мог переключиться на root и выполнять добавление и удаление заданий Cron.
Давайте начнем.
Предпосылки
- Основное понимание скриптов Shell и Cronjobs.
- Аккаунт AWS (создайте, если у вас его нет).
- Экземпляр EC2 с пользователем, имеющим доступ к sudo (Нажмите здесь, чтобы узнать, как создать экземпляр EC2, если у вас его нет или вы хотите научиться )
Что мы будем делать
- Создайте сценарий оболочки, чтобы добавить Cronjobs.
- Выполните сценарий оболочки, чтобы добавить задание Cron.
- Создайте сценарий оболочки для удаления Cronjobs.
- Выполните сценарий оболочки, чтобы удалить задание 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, а также избежать потенциальных человеческих ошибок, которые могут возникнуть из-за ручных операций.