boot時の自動実行 - HondaLab/Robot-Intelligence GitHub Wiki
DebianPCやラズパイのboot時に,特定の処理を自動的に実行したい場合が あります. たとえば,wifiへの接続など.
/etc/rc.localで
古いやり方ですが,もっとも簡単な方法は,/etc/rc.localに必要な処理を記述する方法です. ただし,stretch以降はインストール直後は,無効になっていて,使えません. systemctlを使って,rc-local serviceを有効にする必要があります.
/etc/rc.localにboot時に行いたい処理を書き込みます. その後,
# chmod u+x /etc/rc.local
# systemctl start rc-local
ファイル名はrc.localですが,systemctlのservice名はrc-local なので注意が必要です.
systemdのつかいかた
Debian stretch以降は起動プロセスをsystemdで扱うようになりました. 設定は /etc/systemd/system, /lib/systemd/systemの中のserviceファイルに書かれています.
サービスリストを得る
# systemctl list-units --type=service
wpa_supplicant.serviceを止めてみる
sudo systemctl stop wpa_supplicant.service
sudo systemctl mask wpa_supplicant.service
2行目のmaskオプションを実行すると,以降の起動で自動実行されなくなる.
wps.serviceを自作してみる
概略
- /opt/wpa.shを用意
- /etc/systemd/system/wpa.service を用意
- 既存のwpa_supplicant.serviceを止める
- 新しい wpa.service を start, enable
/etc/systemd/syste/wpa.service ファイル
[Unit]
Description=wpa_supplicant for local network
After=network.target auditd.service
ConditionPathExists=/opt # スクリプトを置くディレクトリ
[Service]
Type=oneshot
ExecStart=/opt/wpa.sh # 実行するスクリプト
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
必須なのは,4行目のConditionPathExists と 7行目の ExecStart 2行目のDescriptionは任意.
/opt/wpa.sh ファイル
#!/bin/sh
intf=wlx4494fc1102ab
addr=172.16.1.142
/sbin/ifconfig $intf $addr
sleep 1
/usr/bin/pkill wpa_supplicant
sleep 1
/sbin/wpa_supplicant -i$intf -c/etc/wpa_supplicant/wpa_supplicant.conf &
一行目の #!/bin/sh は必要. 手動で実行するときは不要だが,systemdから実行する際には shellを指定する必要があるようだ.
既存のwps_supplicantが動いていると,うまく動作しないので, 念の為pkillしている.
もちろん,ディレクトリ,スクリプト共に,実行パーミッションが必要.
# chmod 744 /opt
# chmod 744 /opt/wpa.sh
start / enable
# systemctl start wpa.service
# systemctl enable wpa.service
status
# systemctl status wpa.service