サービスを開始したいsamplerbox.service
[Unit]
Description=Starts SamplerBox
[Service]
Type=simple
ExecStart=/root/SamplerBox/samplerbox.sh # this script does: python /root/SamplerBox/samplerbox.py
WorkingDirectory=/root/SamplerBox/
[Install]
WantedBy=multi-user.target
今後 networking.service
(DHCP事項、IP所有権など)が完了しました。
注:私のプログラムはネットワークをまったく使用しません。
これはプロットです(ここが大きいサイズ):
ご覧のとおり、完了をsamplerbox.service
待っていますnetworking.service
。 (複数回テストしてみましたが、すべて同じです。)
試してみました。WantedBy=multi-user.target
別のものに交換しWantedBy=sound.target
てsystemctl disable samplerbox.service
再度有効にしましたが…うまくいきませんでした!
サービスを強制的に最初に開始する方法はnetworking.service
?
答え1
samplerbox.service
ネットワークが完了したら起動します。
しかし、実際に起こるのではなく、偶然に起こったことです。見たら注意深い図から 。samplerbox.service
後で始まるのがわかりますbasic.target
。これは正常な現象であり、systemdによって設計されています。ほとんどの(非システム)サービスには、サービス単位に記録されていない暗黙の依存関係とシーケンスである「基本依存関係」セットがあります。依存関係basic.target
と後続の順序は、サービス単位でデフォルト値が明示的に無効にされない限り、systemdによって適用されるデフォルト値の1つです。
また、順序と依存関係を混同しています。さまざまな "want" ディレクティブ (たとえば、WantedBy
使用しているディレクティブとその逆ディレクティブWants
) は依存関係を指定します。サービス A の開始を要求すると、サービス B も開始するようにシステム・キューにジョブがあります。彼らがするいいえこれらの操作の順序を指定します。順序は他の設定、つまり名前がやや明確で、によってBefore
制御されますAfter
。
ジョブの開始と停止を指定する完全な依存関係セットは、次の簡単なコマンドで構築されますsystemctl start graphical.target
。順序は、これらのジョブの実行時間と順序を指定します。
追加読書
- レナート・ペトリング(2013-10-07)。
systemd.unit
。システムのマニュアルページ。 freedesktop.org. - レナート・ペトリング(2013-10-07)。
systemd.service
。システムのマニュアルページ。 freedesktop.org.