hoge1.serviceとhoge2.serviceという2つのサービスを作成しました。
「hoge1.seriveのExecStartで指定したスクリプトが完全に終了してからhoge2.serviceを起動する」ということをしたい場合は、サービスの起動順序を記述する必要があります。
[Unit]セクションにAfterとBeforeを記述すれば起動順序を指定できますが、これだけだと意図した順序で起動してくれませんでした。
原因は起動完了判定のタイミングで、[Service]セクションのTypeも考える必要があります。
Type = simpleは、「サービス起動と同時に起動完了と判定する」
Type = oneshotは、「サービス起動して、ExecStartで指定したスクリプトが終了したら起動完了と判定する」
Systemd入門(4) - serviceタイプUnitの設定ファイル - めもめも
なので、今回のような場合はhoge1.serviceをType = oneshotにする必要があります。
hoge1.service
[Unit] Description = hoge1.sh runs before hoge2.sh Wants = multi-user.target Before = hoge2.service [Service] ExecStart = /home/pi/hoge1.sh Restart = no Type = oneshot [Install] WantedBy = multi-user.target
hoge2.service
[Unit] Description = hoge2.sh runs after hoge1.sh After = hoge1.service [Service] ExecStart = /home/pi/hoge2.sh Restart = no Type = simple [Install] WantedBy = multi-user.target
実際に意図した順序で起動しているかを確認してみます。
Systemdのサービスの依存関係を調べる方法 - ククログ(2015-12-28)
$ systemd-analyze plot > systemd.svg
作成されたsystemd.svgファイルを適当なブラウザにドラッグ&ドロップすると、デーモンの起動順序を確認できます。
hoge1.serviceの後にhoge2.serviceがactiveしていることがわかります。
どうやらこれで良さそうです:)