systemd:初めて起動したときにサービスを自動的に有効にする方法は?

systemd:初めて起動したときにサービスを自動的に有効にする方法は?

一部のタスクを処理するためにsystemdを使用しており、有効にすると正しく動作するサービスファイルがあります。システム制御

それでは、最初の起動時に自動的に有効にしたいと思います。

代替ファイルを挿入すると、/etc/systemd/system/ファイルの動作が同じ名前で置き換えられることがわかります/lib/systemd/system/

サービスファイルをいくつかのディレクトリに配置して自動的に有効にする方法はありますか?

ベストアンサー1

重要なヒント:以下はUbuntuの状況に適用されます。 Debian のように動作するはずです。 RPMベースの展開防ぐデフォルトでは自動的に起動しますが、まだ目標に近づくことがあります。

ほとんどの場合インストールするmulti-user.target取り付け部分では、次のように使用されます。

[Install]
WantedBy=multi-user.target

これはyour-package.postinstスクリプトが自動的にデーモンを起動することを意味します。

独自のスクリプトがある場合は、your-package.postinst次のようにDebianヘルパーを含める必要があります。

#!/bin/sh

#DEBHELPER#

...your own script here...

この#DEBHELPER#モードがないと、パッケージャはデフォルトのコードを追加しないため、デーモンは自動的にアクティブ化および起動されません。追加されたコードはサービスを有効にして開始します。

systemctl enable <service-name>
systemctl start <service-name>

上記のセクションstaticがないサービスではない場合。[Install]静的提供を使用するには、特別なコマンドラインを有効にする必要があり、デフォルトでは使用できません。

systemctl add-wants multi-user.target <service-name>

ご覧のとおり、コマンドにセクションがないとmulti-user.targetデフォルト値(実際にはsystemd)が知らない内容が含まれています。#DEBHELPER#[Install]


修正する:最新バージョンでは、systemd拡張がインストールメカニズムの一部であり、以下はもう必要ありません。 Ubuntuの場合は22.04、おそらく21.10から始まったようです。

また、パッケージは拡張機能を使用してビルドする必要がありますsystemd。これはdebian/rules、ファイルに次のコンテンツが含まれていることを意味します。

%:
    dh $@ --with systemd --parallel

これはあなたを準備する必要があります。


もし欲しいならいいえ新しくインストールされたサービスを起動したら、次を追加して実際にこれを回避できます。

override_dh_installsystemd:
    dh_installsystemd --no-start --no-disable

システム要件に応じて混合して一致させます。

おすすめ記事