サイトアイコン アマチュア無線局JS2IIU

Raspberry Piで電源起動時にPythonコードを自動実行する方法

こんにちは、JS2IIUです。Raspberry PiにPythonスクリプトを設定し、電源起動時に自動的に実行させる方法をご紹介します。この方法を知っておくと、定期的なデータ収集やリアルタイムの処理など、さまざまな自動化に役立ちます。今回は、systemdの仕組みから設定方法まで、丁寧に解説します。

systemd設定の大まかな手順

systemdとは?

systemdは、Linuxシステムでのサービス管理を担当する仕組みです。Linuxの起動時に自動でバックグラウンドで特定のサービスやスクリプトを実行することができるため、自動実行の設定に最適です。Raspberry Piもsystemdを利用することで、Pythonコードの自動起動が可能です。

自動実行サービスの設定手順

Pythonコードを自動起動させるためには、systemdに専用のサービスファイルを作成します。サービスファイルには、実行するスクリプトやプロセスの挙動を設定します。以下の手順に従って、サービスファイルを作成しましょう。

ステップ1:サービスファイルの作成

サービスファイルの作成

以下のコマンドで、新しいサービスファイルを作成します。テキストエディットには学生時代の経験からemacsをよく使っています。どんなテキストエディタを使ってもOKです。

systemdのサービスファイルを保管するディレクトリは/etc/systemd/systemです。

sudo emacs /etc/systemd/system/my_python_script.service

サービスファイルの内容

作成したサービスファイル(my_python_script.service)には、以下の内容を記述します。なお、この例はvenv仮想環境のpythonを実行させています。それぞれの環境に合わせて6行目のExecStartの内容を書き換えて下さい。

[Unit]
Description=Auto-start Python Script on Boot
After=network.target

[Service]
ExecStart=/home/pi/venv/bin/python /home/pi/my_script.py
WorkingDirectory=/home/pi
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

サービスの有効化と無効化

サービスファイルを作成した後、systemdに認識させ、有効化します。

サービスの有効化

次回の起動時に自動で実行されるように、サービスを有効化します。

sudo systemctl enable my_python_script.service

サービスの無効化

自動起動を無効にする場合は、以下のコマンドを実行します。

sudo systemctl disable my_python_script.service

サービスの開始、停止

設定をテストするために、手動でサービスを開始・停止することも可能です。

sudo systemctl start my_python_script.service
sudo systemctl stop my_python_script.service

自動起動させるPythonコードのサンプル

とりあえずsystemdを試したい方向けに。

以下は、systemdで自動実行させるPythonスクリプトの例です。このスクリプトは、1分ごとに現在時刻を出力します。systemdの設定通りのディレクトリにファイルを保存します。Exec.startに記載した/home/pi/my_script.pyに合わせて下さい。

import time

while True:
print("現在時刻:", time.strftime("%Y-%m-%d %H:%M:%S"))
time.sleep(60)

まとめと参考リンク

今回の手順を実行することで、Raspberry Pi起動時に自動的にPythonコードを実行できるようになります。systemdは柔軟で多機能なサービス管理システムであり、自動化を行う上で非常に役立ちます。

参考リンク

この手順に従えば、電源を入れるだけで指定したPythonコードが自動で動作するようになります。

<PR>

モバイルバージョンを終了