インストールされているディスクのシステムリンクユニットファイルをロードできません。

インストールされているディスクのシステムリンクユニットファイルをロードできません。

通常のsystemdディレクトリ(/etc/systemd/systemおよび/usr/lib/systemd/system)の外部にデプロイしたいsystemdサービスを持つ内部アプリケーションがあります。場所は別のディスクにあります(例では/mnt/data)。

systemd サービスは次のようにアクティブになります。

systemctl enable /mnt/data/sprinterd.service

/etc/systemd/system にシンボリックリンクを作成します。

lrwxrwxrwx. 1 root root   27 Jun 20 22:47 sprinterd.service -> /mnt/data/sprinterd.service

再起動後にユニットファイルが見つからず、サービスがロードされません。 Journalctlが最初にサービスを読み込めなかったというエラーが発生し、次にそのデバイスを含むディスクをマウントします。

Cannot add dependency job for unit sprinterd.service, ignoring: Unit sprinterd.service failed to load: No such file or directory.
systemd[1]: Mounted /mnt/data.

/etc/fstabから:

/dev/disk/by-uuid/c55e944f-5c63-48ad-8cd2-bd32d7b35c82 /mnt/data auto nosuid,nodev,nofail,x-gvfs-show 0 0

完全性のために、サービス単位ファイルは次のとおりです。

[Unit]
Description=sprinterd

[Service]
Type=simple
Environment=TERM=linux
ExecStart=/srv/s1.erp/bin/sprinterd
Restart=always
RestartSec=5
KillSignal=SIGKILL

[Install]
WantedBy=multi-user.target

私はこれをRHEL 7とopenSuSE 13.2でテストしました。

/ etcまたは/ usr以外のディスクにシステムサービスユニットファイルを配置する機能はサポートされていますか?ディスクマウントとシステム単位のファイルロードの間の実行順序を変更するには?

答え1

@StephenHarrisが説明したように、問題は現在systemdがデバイスを読み取ろうとしており、シンボリックリンクファイルがまだ利用できないことです。


インストール後にデバイスを再ロードするようにsystemdに指示します。

[Unit]
Description=reloads units stored in /mnt/data
DefaultDependencies=no
After=mnt-data.mount
Requires=mnt-data.mount

[Service]
Type=oneshot
ExecStart=/bin/systemctl daemon-reload

[Install]
WantedBy=local-fs.target

今回はデバイスが利用できるようになります。この時間シンボリックリンクのターゲットはすでにマウントされています。

しかし、それまでに実行する必要があるタスクのリストは次のとおりです。基本ターゲットすでに構築され、サービス中に慣れる始めましょう。


サービスも再起動するには、次の手順に従ってください。

[Unit]
Description=restart unit stored in /mnt/data
Requires=mnt-data.mount

[Service]
Type=oneshot
ExecStart=/bin/systemctl daemon-reload
ExecStartPost=/bin/systemctl start sprinterd.service

[Install]
WantedBy=multi-user.target

代替:

  • ExecStart=&でテストしましたが、ExecStartPost=明らかにExecStartPre=&と一緒に使用する必要があります。ExecStart=
  • 1つのユニットに関するものであれば、次のようにすることもできます ExecStart=/bin/systemctl enable /mnt/data/sprinterd.serviceデーモンの再ロード
  • 複数のサービスがある場合は、次の操作を行います。デーモンの再ロードConsistsOf=をクリックして、複数のPartOf=サービスのすべてを使用またはロードする単位を開始します。
  • NFS(または他のネットワークシステム)の場合、これは明らかにlocal-fs.target最良のインストールオプションではありません。

より古い学校のためにシステム初期化スタイルアプローチでは、systemctlコマンドを/etc/rc.localファイルに入れますchmod +x

次に、Devuanメーリングリストにb0rked SystemDを変更するためにSysVInitが必要な方法を投稿してください;-)

答え2

これは既知の制限。解決策を提供できることを願っています。

関連情報