概要
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 ディレクトリを作成することで永続化される。
コメント
[…] Raspberry Pi : Systemd を使って OS の起動・終了時に自動実行する概要OS の起動時に自動実行する方法としては rc.local や cron の @reboot を使った方法があるが、よりエレガントな Systemd を使った […]