システムサービスのカスタム位置

システムサービスのカスタム位置

通知する方法がありますか?システム特定のパスでサービスファイルを検索しますか?

ただこんな感じマンページ状態、検索パスはコンパイル時に決定されます。だからXDG_DATA_DIRS環境変数を設定しました。/etc/systemd/user.conf

Environment="XDG_DATA_DIRS=/custom/path/lib" 

しかし、うまくいきません。

PS:私のサービスは以下を通して行われました。データベースバス

答え1

- システムバス

systemd--systemバスはsystemdを使用する「一般的な」方法です。これはシステム全体のバスであり、rootバスman systemd.unitのロードパスを--system次のように説明します。

/etc/systemd/system.control
/run/systemd/system.control
/run/systemd/transient
/run/systemd/generator.early
/etc/systemd/system          <-- local units usually go here
/run/systemd/system
/run/systemd/generator
/usr/local/lib/systemd/system
/lib/systemd/system          <-- packaged units usually go here
/run/systemd/generator.late

このマニュアルページには、次の内容も記載されています。

変数が設定されると、$SYSTEMD_UNIT_PATH変数の内容が単位ロードパスを上書きします。空のコンポーネント(":")で終わると、$SYSTEMD_UNIT_PATH一般的な単位ロードパスが変数の内容に追加されます。

この変数を設定すると、ロードパスの前にSYSTEMD_UNIT_PATH=/my/path/:追加されます。/my/pathただし、systemdがすでに実行されているため、コマンドラインから簡単に実行することはできません。

SYSTEMD_UNIT_PATH=/my/path: systemd

バスの環境を設定するには、システムバスに影響を与えるように次のファイルの値を設定するsystemd --system必要があります。man systemd-system.conf

/etc/systemd/system.conf
/etc/systemd/system.conf.d/*.conf   <-- Install your change here
/run/systemd/system.conf.d/*.conf
/lib/systemd/system.conf.d/*.conf

この設定に何を入れるかについてのマニュアルページでは、次のように説明します。

ManagerEnvironment=
    Takes the same arguments as DefaultEnvironment=, see above. Sets 
    environment variables just for the manager process itself. In contrast 
    to user managers, these variables are not inherited by processes spawned 
    by the system manager, use DefaultEnvironment= for that. Note that these
    variables are merged into the existing environment block. In particular, 
    in case of the system manager, this includes variables set by the kernel 
    based on the kernel command line.

したがって、このファイルを次のようにインストールしてください/etc/systemd/system.conf.d/mypath.conf

[Manager]
ManagerEnvironment="SYSTEMD_UNIT_PATH=/my/path:"

免責事項:マイコンピュータのバージョン250.4SYSTEMD_UNIT_PATHに文書化されていますが、man systemd.unitこれは文書化されていません。ここ。これはおそらくその機能を使用しなくなったことを意味します。SYSTEMD_UNIT_PATHコンピュータのマニュアルページに記載されていない場合は、サポートされていません(またはサポートされなくなりました)。この場合、唯一のオプションは、/etc/systemd/system/各ユニットが存在する場所にシンボリックリンクを作成することです。

--ユーザーバス

systemd--userバスは、ログインしたすべてのユーザーに対して実行されます。これは、ユーザーのバックアップ、ユーザーのマウント、GUIの起動、VNCサーバーなどの他のデスクトップ環境に役立ちます。このバスのデバイスを管理するにはsystemctl --user {start,stop} ...(なし)を実行する必要がありますsudo。バスman systemd.unitのロードパスを--user次のように説明します。

$XDG_CONFIG_HOME/.config/systemd/user.control
$XDG_RUNTIME_DIR/systemd/user.control
/run/systemd/transient
/run/systemd/generator.early
$XDG_CONFIG_HOME/.config/systemd/user or $HOME/.config/systemd/user
$XDG_CONFIG_DIRS/.config/systemd/user or /etc/xdg/systemd/user
/etc/systemd/user
$XDG_RUNTIME_DIR/systemd/user
/run/systemd/user
$XDG_RUNTIME_DIR/systemd/generator
$XDG_DATA_HOME/systemd/user or $HOME/.local/share/systemd/user
$XDG_DATA_DIRS/systemd/user or /usr/local/share/systemd/user
$dir/systemd/user for each $dir in $XDG_DATA_DIRS
/usr/local/lib/systemd/user/*
/usr/lib/systemd/user/*
$XDG_RUNTIME_DIR/systemd/generator.late/*

systemdバスの環境を設定するには、次のファイルでバスに影響を与える設定値を--user見つける必要があります。man systemd-user.confuser

~/.config/systemd/user.conf     <-- Here if it should affect one user
/etc/systemd/user.conf
/etc/systemd/user.conf.d/*.conf <-- Here if it should affect all user buses
/run/systemd/user.conf.d/*.conf
/usr/lib/systemd/user.conf.d/*.conf

DefaultEnvironment=この場合は、またはを設定する必要があるかどうかわからないManagerEnvironment=ので、両方を設定します。

[Manager]
ManagerEnvironment="XDG_DATA_DIRS=/my/path:/usr/share/gnome:/usr/local/share/:/usr/share/"
DefaultEnvironment="XDG_DATA_DIRS=/my/path:/usr/share/gnome:/usr/local/share/:/usr/share/"

それからユニットを入れなければなりません。/my/path/systemd/user/

答え2

$XDG_DATA_DIRbashrc / profile.dではなく、systemd環境変数を使用して環境変数を設定する必要があると思います。

私は最初の例を信じていますsystemd.環境ジェネレータあなたが欲しいものをしてください。クイックリファレンスのために以下にコピーしました。

# 50-xdg-data-dirs.sh

#!/bin/sh
# SPDX-License-Identifier: CC0-1.0

# set the default value
XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}"

# add a directory if it exists
if [ -d /opt/foo/share ]; then
    XDG_DATA_DIRS="/opt/foo/share:${XDG_DATA_DIRS}"
fi

# write our output
echo "XDG_DATA_DIRS=${XDG_DATA_DIRS}"

もう1つの可能性は、で説明したように、各サービスファイル内の.confファイルにシステム変数を定義することです。/etc/systemd/system.conf.d/この他のSO

関連情報