0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CronCronCron

Last updated at Posted at 2024-08-09

Pythonのスクリプトをcronジョブで60秒ごとに実行し、さらに起動時間とファイルパスをパラメーター化し、簡単に切り替え可能な環境を作成する手順を説明します。

1. Pythonスクリプトの作成

まず、Pythonスクリプトmain.pyを作成し、パラメーターとして起動時間とファイルパスを受け取れるようにします。また、本番環境と開発環境のファイルパスを簡単に切り替えられるようにします。

# main.py
import sys
import datetime

def main(start_time, file_path):
    now = datetime.datetime.now()
    print(f"Script started at: {now}")
    print(f"Configured start time: {start_time}")
    print(f"Using file path: {file_path}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: python3 main.py <start_time> <file_path>")
        sys.exit(1)

    start_time = sys.argv[1]
    file_path = sys.argv[2]

    main(start_time, file_path)

このスクリプトでは、引数として受け取ったstart_timefile_pathを表示します。これを実行する際に、どちらの環境で実行するかを指定できます。

2. 環境ごとのファイルパスの切り替え

本番環境と開発環境のファイルパスを簡単に切り替えるために、環境ごとの設定を行います。設定ファイルや環境変数を使用する方法もありますが、ここでは単純なシェルスクリプトを使った切り替え方法を説明します。

2.1 環境設定用シェルスクリプトの作成

例えば、本番環境と開発環境のファイルパスを次のように設定します。

# set_env.sh

# Set paths for production and development
PROD_PATH="/path/to/prod/main.py"
DEV_PATH="/path/to/dev/main.py"

# Choose environment
ENV="prod"  # Change this to "dev" for development environment

# Determine the file path based on the chosen environment
if [ "$ENV" = "prod" ]; then
    FILE_PATH=$PROD_PATH
else
    FILE_PATH=$DEV_PATH
fi

# Start time can be dynamically set or hardcoded
START_TIME=$(date +"%Y-%m-%d %H:%M:%S")

# Execute the Python script with the parameters
/usr/bin/python3 $FILE_PATH "$START_TIME" "$FILE_PATH"

このスクリプトでは、環境変数ENVを変更するだけで、本番環境と開発環境のファイルパスを簡単に切り替えることができます。

3. cronジョブの設定

次に、このスクリプトをcronで60秒ごとに実行するように設定します。

  1. ターミナルでcrontab -eを実行して、cronの編集モードに入ります。

    crontab -e
    
  2. 以下のように、cronジョブを設定します。

    * * * * * /path/to/set_env.sh >> /path/to/your/log/output.log 2>&1
    

    これで、set_env.shが1分ごとに実行され、main.pyが指定された環境に応じて起動されます。

4. 設定の確認とテスト

設定が正しく行われたかどうかを確認するために、次の手順を行います。

  1. crontab -lコマンドを使ってcronジョブのリストを確認し、設定が反映されていることを確認します。

    crontab -l
    
  2. システムログファイルまたは指定したoutput.logファイルを確認して、スクリプトが正常に実行されているかどうかをチェックします。

    tail -f /path/to/your/log/output.log
    

まとめ

これで、cronを使ってPythonスクリプトを60秒ごとに実行し、起動時間とファイルパスをパラメーター化したスクリプトを実行する環境が整いました。また、本番環境と開発環境のファイルパスを簡単に切り替えられるようにすることで、柔軟にスクリプトを実行できます。

以下に、上記の設定内容を設定書としてまとめました。


Python定時起動機能設定書

目的

この設定書は、Pythonスクリプトをcronジョブで60秒ごとに定時起動させるための設定方法を詳細に記述したものです。スクリプト起動時に、起動時間とファイルパスをパラメーターとして渡し、本番環境と開発環境のファイルパスを簡単に切り替えられるようにします。

前提条件

  • Python 3.xがインストールされていること。
  • cronが利用可能であること。
  • スクリプトが実行可能なアクセス権限が設定されていること。

ファイル構成

  1. main.py - 実行されるPythonスクリプト
  2. set_env.sh - 環境設定用シェルスクリプト
  3. cronジョブ設定

1. Pythonスクリプト main.py

Pythonスクリプトは、引数として起動時間とファイルパスを受け取ります。これにより、どちらの環境(本番/開発)で実行されたかを判断できます。

# main.py
import sys
import datetime

def main(start_time, file_path):
    now = datetime.datetime.now()
    print(f"Script started at: {now}")
    print(f"Configured start time: {start_time}")
    print(f"Using file path: {file_path}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: python3 main.py <start_time> <file_path>")
        sys.exit(1)

    start_time = sys.argv[1]
    file_path = sys.argv[2]

    main(start_time, file_path)

2. 環境設定用シェルスクリプト set_env.sh

本番環境と開発環境のファイルパスを切り替えるための設定を行います。環境変数ENVを変更することで、簡単に環境を切り替えることが可能です。

# set_env.sh

# Set paths for production and development
PROD_PATH="/path/to/prod/main.py"
DEV_PATH="/path/to/dev/main.py"

# Choose environment
ENV="prod"  # Change this to "dev" for development environment

# Determine the file path based on the chosen environment
if [ "$ENV" = "prod" ]; then
    FILE_PATH=$PROD_PATH
else
    FILE_PATH=$DEV_PATH
fi

# Start time can be dynamically set or hardcoded
START_TIME=$(date +"%Y-%m-%d %H:%M:%S")

# Execute the Python script with the parameters
/usr/bin/python3 $FILE_PATH "$START_TIME" "$FILE_PATH"

3. cronジョブ設定

1分ごとにset_env.shスクリプトを実行し、環境に応じたmain.pyスクリプトを起動します。

  1. ターミナルでcrontab -eを実行し、cronジョブを設定します。
crontab -e
  1. 以下のジョブを追加します。
* * * * * /path/to/set_env.sh >> /path/to/your/log/output.log 2>&1
  • * * * * *:1分ごとに実行。
  • /path/to/set_env.sh:実行するシェルスクリプトのフルパス。
  • >> /path/to/your/log/output.log 2>&1:出力とエラーログをoutput.logにリダイレクト。

4. 確認手順

  1. crontab -lコマンドを使用して、設定されたcronジョブを確認します。
crontab -l
  1. ログファイルを確認して、スクリプトが正常に実行されていることを確認します。
tail -f /path/to/your/log/output.log

まとめ

この設定書に従うことで、Pythonスクリプトを60秒ごとに自動的に実行し、環境に応じたパスの切り替えやパラメーターの設定が可能になります。環境の切り替えはシェルスクリプトのENV変数を変更することで簡単に行えます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?