通常の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
これは既知の制限。解決策を提供できることを願っています。