Rust版の震度計のアプリを起動時にssd1306の画面が乱れたままで復旧しないことがある、システム起動後の起動では問題ないからspiの初期化が一番怪しいけれども、ともかくもハードウェアに関連するだろうことは間違いない
でsystemdの起動を遅らせれば良いだろうから、そのための設定をググってもなかなか当たらないからPerplexity Labsに聞いてみると、ExecStartPre=/bin/sleepで時間設定すれば良いと言われたのでやってみたら正解
まあ、seismic起動前にsleepで30秒待てと言っているだけなので、ExecStartPreは本来実行したいコマンドの前に実行する処理を記述しているだけなのですが
$ sudo systemctl daemon-reload
$ sudo systemctl enable seismic.service
で設定を有効化して、電源オフ後の再起動では問題ないようです、30秒というのはsshでログインしようとしてログインが可能になるタイミングからさらに10秒近く経過ですが、この時点では全てのサービスがレディになると考えればよさそうです、本来的には時間待ちではなくてどれかのサービス起動後に起動というのが正しそうですが
[Unit]
Description = measure
[Service]
ExecStartPre=/bin/sleep 30s
ExecStart=/home/pi/rust/seismic
Restart=no
Type=oneshot
[Install]
WantedBy=multi-user.target
Python版では起動に失敗していたので、serviceファイルで待ち時間設定ではなく、コードの最初で20秒sleep入れてたけど、やり方としてはserviceファイル記述がはるかにスマート
admin