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_time
とfile_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秒ごとに実行するように設定します。
-
ターミナルで
crontab -e
を実行して、cron
の編集モードに入ります。crontab -e
-
以下のように、
cron
ジョブを設定します。* * * * * /path/to/set_env.sh >> /path/to/your/log/output.log 2>&1
これで、
set_env.sh
が1分ごとに実行され、main.py
が指定された環境に応じて起動されます。
4. 設定の確認とテスト
設定が正しく行われたかどうかを確認するために、次の手順を行います。
-
crontab -l
コマンドを使ってcron
ジョブのリストを確認し、設定が反映されていることを確認します。crontab -l
-
システムログファイルまたは指定した
output.log
ファイルを確認して、スクリプトが正常に実行されているかどうかをチェックします。tail -f /path/to/your/log/output.log
まとめ
これで、cron
を使ってPythonスクリプトを60秒ごとに実行し、起動時間とファイルパスをパラメーター化したスクリプトを実行する環境が整いました。また、本番環境と開発環境のファイルパスを簡単に切り替えられるようにすることで、柔軟にスクリプトを実行できます。
以下に、上記の設定内容を設定書としてまとめました。
Python定時起動機能設定書
目的
この設定書は、Pythonスクリプトをcron
ジョブで60秒ごとに定時起動させるための設定方法を詳細に記述したものです。スクリプト起動時に、起動時間とファイルパスをパラメーターとして渡し、本番環境と開発環境のファイルパスを簡単に切り替えられるようにします。
前提条件
- Python 3.xがインストールされていること。
-
cron
が利用可能であること。 - スクリプトが実行可能なアクセス権限が設定されていること。
ファイル構成
-
main.py
- 実行されるPythonスクリプト -
set_env.sh
- 環境設定用シェルスクリプト -
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
スクリプトを起動します。
- ターミナルで
crontab -e
を実行し、cron
ジョブを設定します。
crontab -e
- 以下のジョブを追加します。
* * * * * /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. 確認手順
-
crontab -l
コマンドを使用して、設定されたcron
ジョブを確認します。
crontab -l
- ログファイルを確認して、スクリプトが正常に実行されていることを確認します。
tail -f /path/to/your/log/output.log
まとめ
この設定書に従うことで、Pythonスクリプトを60秒ごとに自動的に実行し、環境に応じたパスの切り替えやパラメーターの設定が可能になります。環境の切り替えはシェルスクリプトのENV
変数を変更することで簡単に行えます。