Raspberry Pi : Systemd を使って OS の起動・終了時に自動実行する

概要

OS の起動時に自動実行する方法としては rc.local や cron の @reboot を使った方法があるが、よりエレガントな Systemd を使った方法。
起動時だけでなく、終了時にも自動実行できる。

環境

  • Raspberry Pi 3 Model B
  • Raspbian Strech

  • Debian 9 Strech

手順

Unit ファイル の作成

/etc/systemd/system/ ディレクトリに autorun.service を以下の内容で作成する。

[Unit]
Description=Execute at OS startup and terminates
After=network.target

[Service]
Type=oneshot
ExecStart=/home/pi/autorun.sh
ExecStop=/home/pi/os_term.sh
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

After=network.target はネットワーク関連のプロセスが起動した後に当サービスを起動するという意味。
ネットワークの環境が整うのを待つ必要がないなら After=local-fs.target でも OK。

ExecStart= は起動時に実行したいスクリプト(フルパス)。
ExecStop= は終了時に実行したいスクリプト(フルパス)。

RemainAfterExit=true は終了時に処理を行う場合は必ず必要。

実行ユーザーを指定したい場合は User= で可能。

サービスの有効化

$ sudo systemctl daemon-reload
$ sudo systemctl enable autorun.service

テスト

サービスをスタートして起動スクリプトが実行されるかを確認。

$ sudo systemctl start autorun.service

起動しない場合はログを確認。

$ journalctl -e

同様にサービスを停止して起動スクリプトが実行されるかを確認。

$ sudo systemctl stop autorun.service

問題なければ再起動して確認。

$ sudo reboot
journal ログファイルは再起動のたびにクリアされるが、/var/log/journal ディレクトリを作成することで永続化される。

コメント

  1. […] Raspberry Pi : Systemd を使って OS の起動・終了時に自動実行する概要OS の起動時に自動実行する方法としては rc.local や cron の @reboot を使った方法があるが、よりエレガントな Systemd を使った […]

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