れすたぴは死んでしまった

ラビットハウスは年俸制

【2024年03月最新】ラズパイ起動時にrc.localによる自動実行ができなくなった時の対処法

目次

はじめに

私はラズパイ+node.jsで自宅IoT環境を整備しています。

ですが先日OSをアップデートしたら永らく愛用していた

/etc/rc.local

#!/bin/sh -ecode:
#
# rc.local
(中略)
sudo -u myuser node XXXX.js
exit 0

でラズパイ起動時にnodeコマンドを自動実行する機能が使えなくなりました。

色々ググったら「そもそもrc.localで自動実行という考えが古い」てな感じだったので、諦めてsystemdでサービス化して自動実行するようにしました。
ちょっと面倒ですが仕方ないです。じゃあなrc.local!

 

環境

Raspberry Pi 4 Model B Rev 1.1

 ▶Raspbian GNU/Linux 10 (buster)
 ▶Linux raspberrypi 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux

 

やったこと

systemdのユニットファイル(サービスの中身を記述するファイル)作成

ユニットファイルの置き場所に移動する
cd /etc/systemd/system/
ユニットファイルを作る

今回は「restapi」というサービス名にしてみます。

sudo vi restapi.service ←{任意のサービス名}.serviceという形式のファイルを作成する
[Unit]
Description=ワシが作った ←ユニットの説明を入れる [Service]
User=myuser ←実行ユーザ名を入れる
WorkingDirectory=/home/myuser/mynodeapp ←実行ディレクトリを入れる
ExecStart=node mynodeapp1.js ←実行したいコマンドを入れる
[Install]
WantedBy=multi-user.target ←CLI環境で実行する為のおまじない(必須)

systemdのサービス有効化

以下のコマンドでサービスを有効化します。これで起動時に自動実行されるようになります

sudo systemctl enable restapi.service

今すぐサービスを実行するには

sudo systemctl start restapi.service

サービスの状態を確認するには

sudo systemctl status restapi.service
※Active: active (running) なら実行されている。

サービスを無効化して停止するには

sudo systemctl disable restapi.service
sudo systemctl stop restapi.service

ラズパイを再起動して確認

ラズパイを再起動してきちんとサービスが実行されているか確認します。

sudo reboot

起動してきたら…

sudo systemctl status restapi.service
※Active: active (running) なら実行されている。
ps -e | grep node

で確認しましょう。

 

rc.localの記述を削除

/etc/rc.local 内の自動実行の記述はもう使わないので行を削除しておきましょう。

万一また復活して二重で実行されたりしたら嫌ですし。