外部メディアがマウントされていることを確認するために起動時に確認するシステムサービスがあります。
[Unit]
Description=My App
ConditionPathIsMountPoint=/mnt/sdcard
[Service]
WorkingDirectory=/opt/myapp
ExecStartPre=+/opt/myapp/bin/pre.sh
ExecStart=/opt/myapp/bin/myapp
ExecStop=/bin/kill -INT ${MAINPID}
ExecReload=/bin/kill -INT ${MAINPID} && /opt/myapp/bin/myapp
Restart=always
RestartSec=5
User=user
Group=user
[Install]
WantedBy=multi-user.target mnt-sdcard.mount
myapp
インストールまで開始を待ちたいです/mnt/sdcard
。しかし、サービスはそれほどうまくいきませんでした。インストールメディアが遅れると、systemdは例外をスローしてstart condition failed
再試行しません。
# systemctl status myapp
● myapp.service - My App
Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Wed 2021-01-27 14:22:31 JST; 2h 35min ago
ConditionPathIsMountPoint=/mnt/sdcard was not met
起動条件が失敗したときに起動を再試行する方法は?
答え1
プレリリーススクリプトで、外部メディアがループに遅延マウントされていることを確認してください。
答え2
起動時にSDカードをマウントする必要がある場合は、条件の代わりに以下を追加できます。
Requires=mnt-sdcard.mount
mnt-sdcard.mount
から削除されましたWantedBy
。それが何をしているのかわかりません。