⏰
AWS EC2 と RDS で 定期実行(CRON)
定期実行とエラーログ・権限設定について
EC2内の仮想環境ではpythonコマンドで実行できていたファイルを定期実行できるように設定する。
実行用のシェルスクリプトを作成
tera term で EC2にアクセスした後、該当プロジェクトのディレクトリに移動する。
実行用のシェルスクリプト(ここでは execute.sh とする)を vim エディターで作成。
vi execute.sh
編集モード(i)に切り替えて、
シェルスクリプトを書くという宣言と、通常EC2で設定していた仮想環境を作るコマンド・必要なモジュール(プロジェクトによる)をインストールするスクリプトを書いて、最後にpythonファイルの実行コマンドを入力。
#!/bin/sh
sudo yum install python3 -y
python3 -m venv myenv
source myenv/bin/activate # 仮想環境の有効化
pip install mysql-connector-python
pip install requests
pip install bs4
pip install python-dotenv
pip install lxml
python /home/ec2-user/該当ディレクトリ/run.py(実行ファイル)
エラーログ用のファイルを作成
該当ディレクトリ(実行ファイル・上記シェルスクリプトと同じ階層)で定期実行がエラーになった場合に確認できるファイルを作成する。(中身は空でOK)
vi cron-error.log
定期実行CRON設定
ルート権限で定期実行を設定する。
sudo を先頭に付けるとルート権限、付けなければ作業ユーザーでの設定になる。
sudo crontab -e # ルート権限で編集
# crontab コマンドの紹介↓↓
sudo crontab -l # 定期実行一覧を確認できる
crontab -r # 実行ファイルが全て削除されるので注意
編集の場合vimエディターで開かれるので、iで編集モードにして
テスト用に時間も設定してみる。
作成したexecute.shの実行と、内容もエラーログに記載されるよう入力。
PATH=/sbin:/bin:/usr/sbin:/user/bin # おまじない
MAILTO=root # おまじない
HOME=/ # おまじない
# 52 ... 〇〇分
# 1 ... 〇〇時 (ここでは協定世界時(UTC)を使用しているので、日本時間はプラス9hで10時)
# 19 ... 〇〇日
# mar ... 〇〇月
# sat ...〇曜日
52 1 19 mar sat /home/ec2-user/該当ディレクトリ/execute.sh > /home/ec2-user/該当ディレクトリ/cron-error.log 2>&1
実行シェルスクリプトに権限を付与
エラーログを確認してからでもOK。権限が無いと言われることがあるので権限を付与
chmod 700 /home/ec2-user/該当ディレクトリ/execute.sh
定期実行のログ
設定した定期実行が実行されたかどうかを確認。
sudo tail -f /var/log/cron
定期実行内容のログ
定期実行が実行されたら、エラー or 実行結果が cron-error.log に吐き出されるので内容を cat コマンドで確認。エラーであれば内容を確認して修正。pythonファイルが動いて想定した結果が取得できていれば成功。
cat cron-error.log
Discussion
crontabのPATHで誤記があったのでご連絡します。
user→usrです。