GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプトを使用してAWS上のLinuxEC2インスタンスにCronjobを追加および削除する方法

手動操作は人為的エラーにつながります。 cronジョブを頻繁に追加および削除することは、非常に時間のかかる作業になる可能性があります。この記事では、AWS上のUbuntuEC2インスタンスからのCronjobの追加と削除を自動化するシェルスクリプトを作成します。これらの操作を実行するには、EC2インスタンスにアクセスする必要があります。使用するユーザーは、rootに切り替えて、Cronjobの追加と削除を実行できるように、sudoアクセス権を持っている必要があります。

始めましょう。

前提条件
  1. シェルスクリプトとcronジョブの基本的な理解。
  2. AWSアカウント(アカウントがない場合は作成します)。
  3. sudoアクセス権を持つユーザーのEC2インスタンス(EC2インスタンスがない場合、または学習したい場合は、ここをクリックしてEC2インスタンスの作成を学習してください)
何をしますか
  1. Cronjobを追加するためのシェルスクリプトを作成します。
  2. シェルスクリプトを実行してCronjobを追加します。
  3. cronジョブを削除するためのシェルスクリプトを作成します。
  4. シェルスクリプトを実行して、Cronjobを削除します。

Cronjobを追加するためのシェルスクリプトを作成します

ローカルのLinuxシステムでファイルを作成し、それに次のコードを追加します。次のリンクのGithubリポジトリにもコードがあります。

 Githubリンク:https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-add-remove-cron-job/add-cronjob.sh 
ファイル:add-cronjob.sh 
#!/ bin / bashhelpFunction(){echo "" printf "\ 033 [1; 32mUsage:$ 0 -K  -U  -I 
 -a  "echo" "echo -e" \ t-K\"。cronジョブを追加する必要のあるサーバーの.pemキー\""echo -e" \ t-U cronジョブを追加する必要があります"echo-e" \t-cronジョブを追加する必要があるサーバーのIP"echo-e" \ t-追加するcronの名前(二重引用符で囲みます) "echo" Add a new Cron Job "echo" e.g. " echo "./add-cronjob.sh -K /Users/cloudcover/Documents/Rahul/access/rahuls.pem -U ubuntu-Iec2-35-180-234-158.eu-west-3.compute.amazonaws。 com -a \ "0 5 * * 1 testCronJob \" "echo -e" \ 033 [0m "#reset color exit 1#ヘルプの印刷後にスクリプトを終了} while getopts" I:K:U:a: "optdo case" Kの$opt")internalServerPemKey =" $ OPTARG ";; U)internalServerUser ="$ OPTARG";; I)internalServerIP ="$ OPTARG";; a)addCron ="$ OPTARG";; ? )helpFunction;; #パラメータが存在しない場合にhelpFunctionを出力しますesacdoneecho "******************"#echo $ listCronJobs#パラメータが空の場合にhelpFunctionを出力しますif [-z "$ internalServerIP" ] || [-z "$ internalServerPemKey"] || [-z "$ internalServerUser"] || [-z "$ addCron"] then printf "\ 033 [1; 31m"echo"一部またはすべてのパラメーターが空です"; helpFunctionfi#すべてのパラメーターが正しい場合はスクリプトを開始しますprintf "\ 033 [1; 33m --------------------------------- --------------------------------- ssh "echo -e" \ 033 [0m"#resetcolorecho"の前。新しいユーザーが作成されたサーバーのpemキー:$ internalServerPemKey "echo"新しいユーザーが作成されたサーバーのUserName:$ internalServerUser "echo"新しいユーザーが作成されたサーバーのIP: $ internalServerIP "echo"追加するcronの名前:$ addCron "printf" \ 033 [1; 31mLログイン: "$ internalServerPemKey" "$ internalServerUser" @ "$ internalServerIP" \ 033 [0m \ n "ssh -i" $ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "< <> EOF echo" User Switched To; " whoami printf "\ 033 [1; 33m ----------------------------------------- -------------------------追加前のcronジョブのリスト"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 --------------------------------------- ---------------------------Cronジョブのリストを更新"echo-e" \ 033 [0m "#reset color crontab -l | cat -n printf "\ 033 [1; 31mExiting from --->" $ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "\ 033 [0m \ n"#echo"既存のユーザー--->$userName" EOFHERE 

新しいCronjobを作成する前に、EC2インスタンスに既存のCronjobがあるかどうかを確認してください

EC2インスタンスにログインし、既存のCronjobsを確認します

 ssh -i〜/ Downloads /howtoforge-test.pem[メール保護]

cronジョブを一覧表示する

 crontab -l <​​/ pre> シェルスクリプトを実行してCronjobを追加します 

ローカルのLinuxマシンに移動し、次のコマンドを使用してUbuntu18.04EC2インスタンスにCronjobを追加します。これにより、毎分トリガーされる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 <​​/ pre> 
 cat / tmp / cron_output 

次のスクリーンショットでは、Cronjobが毎分追加および実行されていることがわかります。

cronジョブを削除するためのシェルスクリプトを作成します

これで、追加したCronjobを削除する必要があると思われる場合は、Githubで利用可能なシェルスクリプトを使用して簡単に削除できます。

次のコードを使用して、ローカルシステムに新しいファイルを作成します。

 Githubリンク:https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-add-remove-cron-job/remove-cronjob.sh 
ファイル:remove-cronjob.sh 
#!/ bin / bashhelpFunction(){echo "" printf "\ 033 [1; 32mUsage:$ 0 -K  -U  -I 
 -l <​​yes / no> "echo" "echo -e" \ t-K\"。cronジョブを削除する必要があるサーバーの.pemキー\""echo -e" \t-Ucronジョブを削除する必要があるサーバーのユーザー名削除される"echo-e" \t-cronジョブを削除する必要があるサーバーのIP"echo-e" \ t-l既存のcronジョブを一覧表示し、パラメーターとして「yes」を指定します。最初に一覧を取得して、次に、削除する必要のあるジョブ番号を指定します "echo -e" e.g. " echo"新しい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 "#reset color exit 1#ヘルプの印刷後にスクリプトを終了} while getopts" I:K:U:l: "optdo case" $ opt "in K)internalServerPemKey =" $ OPTARG ";; U)internalServerUser ="$ OPTARG";; I)internalServerIP ="$ OPTARG";; l)showListOfJobs ="$ OPTARG";; ? )helpFunction;; #パラメータが存在しない場合にhelpFunctionを出力しますesacdoneecho "******************" echo $ listCronJobs#パラメータが空の場合にhelpFunctionを出力しますif [-z "$ internalServerIP"] || [-z "$ internalServerPemKey"] || [-z "$ internalServerUser"] || [-z "$ showListOfJobs"] then printf "\ 033 [1; 31m"echo"一部またはすべてのパラメーターが空です"; helpFunctionfi#すべてのパラメーターが正しい場合はスクリプトを開始しますprintf "\ 033 [1; 33m --------------------------------- --------------------------------- ssh "echo -e" \ 033 [0m"#resetcolorecho"の前。新しいユーザーが作成されたサーバーのpemキー:$ internalServerPemKey "echo"新しいユーザーが作成されたサーバーのUserName:$ internalServerUser "echo"新しいユーザーが作成されたサーバーのIP: $ internalServerIP "if [$ showListOfJobs =="yes"] then printf "\ 033 [1; 31mLogging into:" $ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "\ 033 [0m \ n" ssh -i "$ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "<" $ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "\ 033 [0m \ n"EOFHEREfiecho"削除するCronジョブ行番号を入力"readlineNumberprintf " \ 033 [1; 31mLログイン: "$ internalServerPemKey" "$ internalServerUser" @ "$ internalServerIP" \ 033 [0m \ n "ssh -i" $ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "< crontab.tmp crontab crontab.tmp &&rm -f crontab.tmp printf "\ 033 [1; 33m ------------------- -----------------------------------------------更新されたリストCron Jobs "echo -e" \ 033 [0m "#reset color crontab -l | cat -n printf "\ 033 [1; 31mExiting from --->" $ internalServerPemKey "" $ internalServerUser "@" $ internalServerIP "\ 033 [0m \ n" EOFHERE 

シェルスクリプトを実行して、cronジョブを削除します

Cronjobsを削除するには、シェルスクリプトを実行します。 Ubuntu18.04EC2インスタンスで利用可能なすべてのCronjobが一覧表示されます。次に、削除するジョブを選択できます。スクリプトが自動的に削除を行います。

 ./ remove-cronjob.sh -K〜/ Downloads / howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -l yes 

これで、同じスクリプトを再度実行して、EC2インスタンスのCronjobを一覧表示できます。

 ./ remove-cronjob.sh -K〜/ Downloads / howtoforge-test.pem -U ubuntu -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -l yes 

EC2インスタンス自体からCronjobを確認することもできます。

 ssh -i〜/ Downloads /howtoforge-test.pem[メール保護]
 sudo -i 
 crontab -l <​​/ pre> 

結論

この記事では、UbuntuEC2インスタンスにCronjobsを追加および削除するシェルスクリプトを見ました。これは、Cronjobを追加または削除する手動タスクを自動化するのに役立ち、手動操作によって発生する可能性のある潜在的な人的エラーを回避するのにも役立ちます。


Linux
  1. Linuxでグループにユーザーを追加またはグループから削除する方法

  2. Linux シェル スクリプトでグループが存在するかどうかを確認し、存在しない場合は追加する方法

  3. シェルスクリプトを介してファイルから文字列を削除するには?

  1. 「FSlint」ツールを使用してLinuxで重複/不要なファイルを見つけて削除する方法

  2. Linux でソースから (および YUM を使用して) MongoDB をインストールする方法

  3. Linuxシェルで正規表現を使用してファイルからIPアドレスを抽出するにはどうすればよいですか?

  1. LinuxでTeeとXargsを使用して標準入力からコマンドを実行する方法

  2. AWSインスタンス(EC2)でEBSボリュームを作成および追加する方法

  3. IPコマンドを使用してLinuxで静的ルートを追加および削除する方法