CronCronCron

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

### 1. Pythonスクリプトの作成

まず、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)
```

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

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

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

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

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

```bash
# 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`の編集モードに入ります。

    ```bash
    crontab -e
    ```

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

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

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

### 4. 設定の確認とテスト

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

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

    ```bash
    crontab -l
    ```

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

    ```bash
    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スクリプトは、引数として起動時間とファイルパスを受け取ります。これにより、どちらの環境（本番/開発）で実行されたかを判断できます。

```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`を変更することで、簡単に環境を切り替えることが可能です。

```bash
# 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`ジョブを設定します。

```bash
crontab -e
```

2. 以下のジョブを追加します。

```bash
* * * * * /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`ジョブを確認します。

```bash
crontab -l
```

2. ログファイルを確認して、スクリプトが正常に実行されていることを確認します。

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

---

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