さて、私はいくつかの組み込みsbcに他のLinuxイメージをフラッシュしてインストールするプロセスを自動化したいと思います。私は現在pxeイメージを使って組み込みデバイスを起動しています。通常、pxeイメージが起動するのを待ってから、pxeサーバー上のイメージを使用してnfsを介してオンボードハードドライブをフラッシュするddコマンドを実行します。したがって、この部分はうまく機能しますが、スタートアップサービスとして実行しようとすると失敗します。運が良かったので一度働きましたが、おかしくて一種のタイムアウトや競争条件があると思うようになりました。だから運が良かったし、同じ設定で再び動作しませんでした。私はrc-local.serviceと私の実際のシステムサービスを通してそれを処理します。私のスクリプトとサービスファイルは次のとおりです。また、これを有効にしてmulti-user.targetの下にリンクがあることを確認しました。
#script at /usr/local/sbin/sysInstall
----------------------------------------------------------------------------
#!/bin/bash
dd if=/mnt/nfs/RTE.img of=/dev/sda status=progress &>> /mnt/nfs/dd_out.txt
shutdown -r now
----------------------------------------------------------------------------
#service file at /etc/systemd/system/sysInstall.service
[Unit]
Description=Load the image onto the harddrive from nfs
[Service]
ExecStart=/usr/local/sbin/sysInstall
[Install]
WantedBy=multi-user.target
はい、/usr/local/sbinのファイルスクリプトをchmod +xしましたが、何も変更されませんでした。また、sciptを/ binに入れて起動後に実行することができ、正常に実行されるため、スクリプト自体は問題ないようですが、サービスは常に失敗します。
[root@station1 ~]# systemctl -l status sysInstall.service
● sysInstall.service - This service auto flashes the local harddrive
Loaded: loaded (/etc/systemd/system/sysInstall.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Thu 2018-10-04 20:37:35 CDT; 34s ago
Process: 3573 ExecStart=/usr/local/sbin/sysINSTALL.sh (code=exited, status=1/FAILURE)
Main PID: 3573 (code=exited, status=1/FAILURE)
Oct 04 20:37:35 station1 systemd[1]: Started This service auto flashes the local harddrive.
Oct 04 20:37:35 station1 systemd[1]: Starting This service auto flashes the local harddrive...
Oct 04 20:37:35 station1 systemd[1]: sysInstall.service: main process exited, code=exited, status=1/FAILURE
Oct 04 20:37:35 station1 systemd[1]: Unit sysInstall.service entered failed state.
Oct 04 20:37:35 station1 systemd[1]: sysInstall.service failed.
最後に興味深いのは、システムがこのスクリプトを使用して再起動するため、そのスクリプトに入りますが、ddが失敗して再起動にジャンプすることです。いいえ、私にはbashが順番に進んでいるので、ddが失敗した場合はなぜ続行しますか?だから問題を診断し、上記の結果を得るために再起動をコメントアウトしました。誰もが私が何を間違っているか、試してみるべきことを指摘することができれば良いでしょう。ありがとうございます。
提案されているようにサービスファイルを編集し、それを出力として取得しました。また、ブートログイン前のように、ブートの終わりにnfs /mnt/nfsがマウントされることを確認しました。したがって、デバイスがその条件を真として受け取り、起動するのを待つ必要がありますか?
[root@station1 ~]# systemctl -l status sysInstall.service
● sysInstall.service - This service auto flashes the local harddrive
Loaded: loaded (/etc/systemd/system/sysInstall.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Condition: start condition failed at Thu 2018-10-04 20:18:32 CDT; 5min ago
ConditionPathIsMountPoint=/mnt/nfs was not met
Oct 04 20:18:32 station1 systemd[1]: Started This service auto flashes the local harddrive.
条件を繰り返し試すための回避策として、OnBootSec =を使用するためにシステムタイマーを調査しています。