7
1

More than 1 year has passed since last update.

EC2にcronで定期タスクを実行させる

Last updated at Posted at 2022-03-17

概要

日常の仕事で、タスクやスクリプトを定期実行すると言うシーンがございますでしょうか。
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のログファイルに実行のコマンド履歴を確認できます。

結果確認

截屏2022-03-18 00.22.15.png

EC2にcronの設定方法紹介は以上となります。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1