「systemctl disable」を使用せずにサービスを無効にする方法


12

別のサービスが失敗したときにのみ実行したいサービスがあります([Unit] OnFailure=foo)が、このサービス(foo)が起動時に自動的に起動しないようにしたい。1つのオプションは実行systemctl disable foo中ですが、別の方法を探しています。

背景:私はOSイメージを作成していますが、マシンを起動してそのコマンド(systemctl disable foo)を実行し、イメージをfinalと宣言する前にシャットダウンする必要はありません。

回答:


4

すべてのサービスはデフォルトで「無効」になっています。「有効化」はオプトインです。

foo.serviceがカスタムサービスの場合、何か(OnFailure=ディレクティブなど)によって明示的にプルされない限り開始されないため、何も「無効」にしないでください。


それで、fooが以前に有効にされていない限り、基本的には「この機能を無料で入手」できますか?
rogerdpack

26

systemctl enableシンボリックリンクを操作すること/etc/systemd/system/で機能します(システムデーモンの場合)。enableサービスを実行するWantedByと、[Install]セクション内の行が確認され、それらの.wantsディレクトリ内のシンボリックリンクがプロップされます。

systemctl disable 反対を行います。

これらのシンボリックリンクを削除するだけでかまいませんsystemctl disable。手動で削除することは、を使用することと完全に同じです。


これはsystemdによってまだ実行されていないサービス(カスタム)であるため、これらの余分なシンボリックリンクはありません。私はそれらが最初の起動時に作成されると思いますか?
tshepang

3
@Tshepang手動で(またはスクリプトで)有効にしない限り、有効にしないでください
derobert

1
ああ、私はそれが自動的に有効になると想定していました(これは、Debianパッケージをインストールすることで期待するようになったものです)。知ってよかった。
tshepang

3
@Tshepangは、有効化を行うパッケージ内のpostinstスクリプトです。または、パッケージに含まれるシンボリックリンクを出荷すると思います。
デロベルト

4

systemctl start ServiceName.serviceおよびsystemctl stop Service.Name.serviceを使用して、それぞれサービスを開始および停止できます。systemctl enable ...およびとsystemctl disable ...は対照的に、開始および停止コマンドは現在のセッションでのみ有効であるため、マシンを再起動しても変更は保存されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.