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

RaspberryPi
この記事は約5分で読めます。

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

systemd設定の大まかな手順

  • サービス設定用のサービスファイル/etc/systemd/system/####.serviceを作成する
  • 自動実行を有効化する →再起動
    • sudo systemctl enable ####.service

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
  • [Unit]セクション
    • Description:サービスの説明(任意の説明文でOK)
    • After:このサービスが他のどのサービスの後に起動するかを指定します。ここではネットワークの初期化後に実行されるよう指定しています。
  • [Service]セクション
    • ExecStart:実行するPythonスクリプトのパス。今回は仮想環境のPythonを使用しています。仮想環境を使っていない場合は/use/bin/python3、もしくは/use/bin/pythonを指定します。
    • WorkingDirectory:スクリプトが実行されるディレクトリ。
    • Restart:プロセスが終了した場合に再起動するかどうかを設定します。
    • 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>

コメント

タイトルとURLをコピーしました