概要
日常の仕事で、タスクやスクリプトを定期実行すると言うシーンがございますでしょうか。
Amazon EventBridgeとLambdaの組み合わせで一般問題を解決する事ができると存じますが。
Lambdaに対して、最大実行時間が15分という制御がございます。
実行時間が長いタスクに対して、相応しくないと存じます。
EC2は計算時間を制御してないです。
今回EC2にcronの設定方法をご紹介させて戴きます。
手順
EC2に接続
sudo su --login ec2-user
定期pythonタスクを定義
import slackweb
import time
slack = slackweb.Slack(url="xxxxxxxxxxxxx")
flg = True
while flg:
time.sleep(60)
now = time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
print(now)
slack.notify(text=now)
無限ループを定義します。
ループに1分ごとを待って、サバーの時間を取得して、slackに投稿します。
時間を取得
$ date
Thu Mar 17 15:15:21 UTC 2022
cronによる定期実行
crontab -e
↑のコマンドでcrontabファイルを編集します。
17 15 * * * /usr/bin/.pyenv/shims/python /home/ec2-user/ec2-cron-test/test.py
20 15 * * * kill -9 $(ps -ef | grep "test.py" | grep -v grep | awk '{print $2}')
crontabファイルに以上のコードを定義します。
UTC 15:17分から、pythonファイルを実行させます。
15:20になったら、pythonファイルの実行をkillします。
ログ確認
sudo tail -f /var/log/cron
Mar 17 15:17:01 ip-xx-xx-xx-xx CROND[21458]: (ec2-user) CMD (/usr/bin/.pyenv/shims/python /home/ec2-user/ec2-cron-test/test.py)
Mar 17 15:20:01 ip-xx-xx-xx-xx CROND[21500]: (ec2-user) CMD (kill $(ps -ef | grep "test.py" | grep -v grep | awk '{print $2}'))
cronのログファイルに実行のコマンド履歴を確認できます。
結果確認
EC2にcronの設定方法紹介は以上となります。