15
Raspberry Piの起動時にスクリプトを実行する方法

Raspberry Piの起動時にPythonスクリプト、アプリ、またはその他のスクリプト(例:Bashスクリプト)を実行したい理由は様々です。例えば、Raspberry Piの起動と同時にタスクを実行できるように準備しておかなければならないロボットやIoTデバイスがあるかもしれません。あるいは、特定のプログラムを常にバックグラウンドで実行しておきたい場合で、毎回手動で起動する手間を省きたい場合もあるでしょう。

Raspberry Pi の起動時にスクリプトを自動的に開始する方法はいくつかありますが、最も簡単な方法は、特定の時間にスクリプトを実行するように設定できるスケジュール機能である crontab を使用することです。

Raspberry Piの起動時にスクリプトを実行する方法

1.次のように入力してcrontab リストを編集します

sudo crontab -e

sudoを使わずにcrontabを起動することは可能ですが、sudoを使うと管理者権限が必要なスクリプトを実行できなくなります。実際、sudoを使用しないとcrontabのリストが異なりますので、sudoを使うか使わないかは必ず確認しましょう。

2.エディターの選択を求められた場合は、nano を選択します。

Raspberry Piチュートリアル

(画像提供:Tom's Hardware)

ファイルが開きます。

3.ファイルの末尾に次のような行を追加します。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

@reboot python3 /home/pi/myscript.py

この行は @reboot で始まる必要があります。これは、Raspberry Pi を起動するたびに実行されるように指示するものです。Python スクリプトの場合は、Python または Python3 インタープリターを起動するコマンドに続けて、Python スクリプトへのフルパスを記述します。 

Bash スクリプトまたは別のアプリの場合は、そのフルパスを入力するだけです。

Raspberry Piチュートリアル

(画像提供:Tom's Hardware)

4.保存して終了します。nanoでは、Ctrl + Xを押し、プロンプトが表示されたらYと答え、Enterキーを押すことで保存できます。

5. Bashスクリプトの場合は、 スクリプトを実行可能にします。Pythonスクリプトは、Pythonインタプリタが既に実行可能なので、実行可能にする必要はありません。以下のコマンドを実行することで、スクリプトを実行可能にすることができます。

sudo chmod a+x FILENAME

crontabからスクリプトを削除したい場合は、もう一度「sudo crontab -e」と入力し、該当の行を削除またはコメントアウトしてください。ウィンドウ環境を必要としないプロジェクトをビルドしている場合は、「sudo raspi-config」と入力し、「Boot Options」→「Desktop / CLI」に移動して「Console Autologin」を選択することで、Raspberry Piをコマンドラインから起動するように設定することで、システムリソースを節約できます。

Raspberry Pi GUIでスクリプトやアプリを自動実行する方法

ウィンドウ化された GUI 内で Raspberry Pi の起動時にスクリプトまたはアプリを実行する場合は、次の手順に従ってください。

1. /etc/xdg/autostart/ ディレクトリにmyapp.desktop (または .desktop という名前のファイル) を作成します。

sudo nano /etc/xdg/autostart/myapp.desktop

2. myapp.desktop ファイルで 次のレイアウトを使用します。

[Desktop Entry]
Exec=chromium-browser https://www.tomshardware.com

コマンドとパラメータはExec=行に記述します。例えば、Chromeブラウザでウェブページを開くには、「chromium-browser [URL]」と記述します。アプリでsudo権限が必要な場合は、Execコマンドにsudoを記述します。 

Raspberry Piチュートリアル

(画像提供:Tom's Hardware)

ターミナルウィンドウでスクリプトを実行するには、lxterminal に --command パラメータを付け、二重引用符で囲んで「/bin/bash -c 'MYCOMMANDS HERE; /bin/bash”」と入力します。例えば、sudo 権限が必要な Python3 スクリプトを実行するには、次のようにします。 

Exec=lxterminal --command”/bin/bash -c ‘sudo python3 /home/pi/myscript.py; /bin/bash’”

これにより、起動時にウィンドウ環境でターミナルウィンドウが起動し、スクリプトが実行されます。スクリプトの実行が終了すると(またはCtrl+Cを押して中止すると)、ターミナルウィンドウはプロンプトに戻ります。スクリプトの実行完了時にターミナルウィンドウを自動的に閉じたい場合は、末尾の ;/bin/bash を省略してください。

このようにターミナルウィンドウでスクリプトを実行すると便利です。ロボット用のスクリプトのように無限ループするPythonスクリプトであれば、Ctrl+Cを押すだけで簡単にスクリプトを終了できます。それ以外の場合は、スクリプトを終了するには、後述するプロセスを見つける必要があります。

脚本を殺す

Raspberry Pi の起動後に自動実行スクリプトを停止したい場合はどうすればよいでしょうか。スクリプトの実行がすでに完了している場合はメモリから消去されますが、継続的に何かを実行するように設計されている場合は、タスクを検索して強制終了する必要があります。

1. ps aux コマンドを使用し、grep の後にスクリプトの名前 (または少なくとも名前の一部) を入力してスクリプトを検索します。

ps aux | grep app.py

app.py をスクリプト名に置き換えてください。プロセス番号のリストが表示されます。

2. sudo kill -9 コマンドを使用して、各プロセス番号を強制終了します。例えば、

sudo kill -9 437
sudo kill -9 438

その他のチュートリアル:

  • Raspberry Piでスクリーンショットを撮る方法
  • Raspberry Pi Webサーバーのセットアップ方法
  • Raspberry Pi 4または3をSSDまたはフラッシュドライブから起動する方法
  • Raspberry Piでカスタムキーボードショートカットを作成する方法
  • Raspberry Pi 4でエミュレータを実行する方法
  • Raspberry Piユーザーが知っておくべき25以上のLinuxコマンド
  • Raspberry Piでニュースティッカーシャツを作る方法