こんにちは、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は柔軟で多機能なサービス管理システムであり、自動化を行う上で非常に役立ちます。
参考リンク
- systemd – Wikipedia
- Raspberry Pi systemdの概要について | Ingenious
- Systemdを使ってさくっと自作コマンドをサービス化してみる #CentOS – Qiita
この手順に従えば、電源を入れるだけで指定したPythonコードが自動で動作するようになります。
<PR>


コメント