最新記事

systemdサービス:EnvironmentFileディレクティブはどのユーザーに読み込まれますか?
systemd
environment-variables

systemdサービス:EnvironmentFileディレクティブはどのユーザーに読み込まれますか?

次のように構成されたsystemdサービスがあります。 [Unit] Description=example systemd service unit file. [Service] ExecStart=/path/to/program EnvironmentFile=/etc/program.conf User=someuser [Install] WantedBy=multi-user.target 今問題は、EnvironmentFileどのユーザーが読んでいるかということです。行動するのかroot、行動するのかsomeuser?文書はあまり明確ではありませんが、テキストは次のとおりです。 このディレクティブでリストされたファイルは、プロセスが実行される直前に読み取られます(具体的には、前のデバイス状態のすべてのプロセスが終了した後)。これは、1つのデバイス状態でこれらのファイルを生成し、このオプションを使用して、次のデバイス状態でファイルシステムの変更(バインドマウントなど)が発生する前に、サービスマネージャのファイルシステムから読み取ることができることを意味します。 したがって、バインドマウントをで行う必要があるかもしれません。これは、バインドマウントの前にroot環境ファイルを読み取るので、環境ファイルをに読み込むと仮定できることを意味しますか?root 試してみることができますが、それについての文書がより明確ではないという事実に少し驚きました。たぶん私が間違った場所を探しているのかもしれません。

Admin

User= または --user を使用してルート化されていないコンテナをシステムサービスとして実行するベストプラクティス?
systemd
non-root-user
podman

User= または --user を使用してルート化されていないコンテナをシステムサービスとして実行するベストプラクティス?

ルートレスコンテナを実行するためにPodmanをシステムサービスとして使用しようとしています。また、rootではなく権限でサービス自体を実行したいと思います。 a) システムサービスであるがUser=サービスユーザーとして設定されるか、 b) 長期実行サービスを許可するために以前に実行された サービスユーザーのユーザーサービス ( ) に設定されます。systemd --userloginctl enable-linger アイデアは、本番環境での小規模デーモンとルートレスコンテナの配備への将来のアプローチを標準化することですが、すべてのトラップを知らないため、これらのアプローチのどれを選択するかを完全に確信できません。以下に背景についての議論があり、実際の問題は太字で示されています。 初期実験では、maptiler/tileserver-glローカルファイルシステムソースからマップタイルを提供するイメージを実行しています。 User=私が注目したことの1つは、オプションaを使用すると、ユニットファイル内に次のように指定されたユーザーに関する情報にアクセスできる組み込みメソッドがないようです。systemd.unit(5) の「指定子」;たとえば、%t点/runと%h点/root)。これは、元のコンテナIDを含むファイルを作成(および削除)するためにinを使用して起動および停止するたびに、コンテナを便利に作成および削除するを使用して単位tileserver-glファイルを生成したためです。もちろん、私たちのサービスユーザーには書き込み権限がありません。単純にハードコーディングできるため(またはコンテナを実行する非再生方法を使用できるため)、これは問題ではありませんが、「アクティブ」の損失は恥ずかしいことです。podman generate systemd --new--new--cidfile=%t/%n.ctr-idExecStart=ExecStartPre=/run/run/user/%tUser=システムサービスファイルからユーザーのUIDを取得し、ExecStart=私が見逃したコマンドに挿入する方法はありますか? 私が正しく理解した場合、他の回避策を取らない限り、両方のオプションは1024未満のTCPおよびUDPポートにバインドできないようです(これ私たちの場合はよさそうです)。最初は、サービスが権限を放棄する前にバインディングを実行できると考えていましたがUser=、そうでないようです。いくつかの研究によると、最も「システムネイティブ」方式はこれを達成するためにソケットデバイスを使用することですが、それを積極的にサポートするには実行中のサービスが必要なようです。どちらのオプションもソケットデバイスなしで子1024ポートに「デフォルト」にバインドすることはできません。 最終的に私はここでベストプラクティスを探しています。読んだソースによっては、--userログインセッション中に一時サービスを強調することもありますが、OTOHの存在はenable-linger長期実行セッションにさらに幅広く適用できることを示すようです。これら2つのオプションの重要な長所と短所は何だと思いますか?この「サービスユーザー」のケースでは、どのようなオプションが良いと思いますが、その理由は何ですか?

Admin

Dotnet は systemctl サービスで --ulrs を実行します。
ubuntu
command-line
systemd
services
systemctl

Dotnet は systemctl サービスで --ulrs を実行します。

dotnet core APIを実行する必要がありますdotnet run --urls https://0.0.0.0:443が、それをサービスに切り替えたいと思います。今、以下があります。 sudo nano /etc/systemd/system/mdvAPI.service [Unit] Description=Dotnet API MDV [Service] WorkingDirectory=/home/g67Admin/projeto_integrador_grupo67/mdv/ ExecStart=dotnet run --urls https://0.0.0.0:443 [Install] WantedBy=multi-user.target 起動しようとすると、次の結果が表示されます。 sudo systemctl start mdvAPI.service Failed to start mdvAPI.service: Unit mdvAPI.service is not loaded properly: Exec format error. See system logs and 'systemctl status mdvAPI.service' for details. 私がここで何を間違っているのか?

Admin

タイムアウト後のシステムワンショットサービスの終了
systemd

タイムアウト後のシステムワンショットサービスの終了

タイムアウト後にワンタイムサービスを終了できますか? サービスがタイマーによって定期的にトリガーされるとしましょう。サービスの完了には通常3秒かかります。しかし、あなたのサービスに欠陥があり、時には無限ループで実行されます。復元サービスはあなたの手の届かないところにあります。だからあなたが望むのは、タイムアウト後にサービスを終了することです。 私達はシミュレートできますSUVサービスは次のとおりです。 [Unit] [Service] Type=oneshot ExecStart=/bin/bash -c 'while true; do echo x; sleep 1; done' [Install] WantedBy=default.target マニュアルページを読むと、TimeoutStopSec有望に見えるオプションのみが見つかります。次へ追加 TimeoutStopSec=10s しかし、[Service]数分経ってもサービスはまったく終了しません。

Admin

フォアグラウンドでsystemdサービスを同期/実行
systemd
x11
session
kiosk
systemd-run

フォアグラウンドでsystemdサービスを同期/実行

私のXsessionを私のカスタムプログラム(設定のようなキオスク)に置き換えたいのですが。以前は、次のSTARTUPファイルに変数を設定しました.xsessionrc。 STARTUP='/path/to/my/program' 今度は、ロギング、設定可能な自動再起動など、いくつかのシステム機能を利用するために、私のプログラムをシステムサービスにラップしたいと思います。以前の設定と同様に、サードパーティのセッションとウィンドウマネージャを実行するのを避けたかったのですが、セッションをアクティブに保つにはまだ何かを実行する必要があるため、次のようにしました。 STARTUP='systemd-run --user --scope /path/to/my/program' しかし、それはまだ便利なシステムデバイスではなく、最終的に次のようになりました。 STARTUP='systemd-run --user --scope --unit my-session sleep inf' 私のプログラムが実行されるサービスユニットを定義しました。 [Unit] Description=My service BindsTo=my-session.scope Requisite=my-session.scope After=my-session.scope [Service] Type=exec ExecStart=/path/to/my/program Restart=always [Install] WantedBy=my-session.scope 通常、この設定は魅力的に機能しますが、動的に生成されたスコープ名に依存することは私に曖昧に見え、時にはセッションを再開するときに暗黙のクリーンアップが必要です。たとえば、次のようになります。 systemctl reset-failed my.service my-session.scope systemdすでに苦情があるからですmy-session.scope。 systemd-run --scopeだから私はシステムサービスを同期的に実行し、同時に動的に作成するのではなく、既存のユニットファイルを再利用する方法を探しています。 PS:以下を試しましたが機能しません(systemctlを中断してもホスティングサービスは中断されません)。 systemctl start --wait my-session.target

Admin

Xディスプレイマネージャサービス制御 - SLES 15
systemd
sles
gdm
display-manager

Xディスプレイマネージャサービス制御 - SLES 15

私はsystemdのファンではなく、これまでSysVInitスクリプト(Devuanなど)を使用するシステムと以前のバージョンのUbuntuで作業してきました。 今私はSLES 15システムに「固定」されています。ディスプレイマネージャサービスを制御する方法を理解しようとしています。プロセステーブルを見て、それがgdmであることがわかりました。しかし、service --status-allgdmやディスプレイマネージャなどへの言及はありませんでした。というファイルが見えますが、/usr/lib/systemd/system/display-manager.servicesystemdはこれについて知らないようです。 それでは、systemdを使用してディスプレイマネージャをどのように制御しますか?

Admin

マウントされたファイルシステムにカーネルモジュールをインストールする方法は?
systemd
kernel-modules
embedded
yocto

マウントされたファイルシステムにカーネルモジュールをインストールする方法は?

私はYoctoプロジェクトを使用して構築された組み込みシステムを設定しています。ルートファイルシステム、カーネル、u-bootなどが出力されます。ボード上でeMMCを設定するためにパーティション、rootfsのコピー、ubootなどを使用するSDカード上で実行されるインストーラスクリプトがあります。 eMMCからシステムを起動したときに起動可能なファイルを作成します。 私が経験している問題はイーサネットドライバにあります。デフォルトではシステムにインストールされません。インストールスクリプトがそれをコピーする/lib/modules/4.14.98-imx8mq+gea48c83/kernel/drivers/net/ethernet/freescale/fec.koと、シリアルを介してログインして手動でロードでき、insmodうまく機能します。しかし、自動的にロードする方法がわかりません。 Systemdは/etc/modules-load.d/ロードするモジュールのリストを探しますが、このプロセスはinsmodの代わりにmodprobeを使用しているようです。 modprobeシステムはまだdepmodを実行していないので、イーサネットドライバを実際に理解していません。ただし、eMMCの代わりにSDカードのインストールにdepmodをインストールするため、インストーラはdepmodを実行できません。 ここで最良のアプローチは何ですか?インストール中にdepmodを実行する方法を見つける必要がありますか?おそらくchrootを使って実行できますか? それとも、depmod / modprobeシステムを使用せずにモジュールを自動的にロードするための良い方法はありますか? ここへの洞察力は大変感謝いたします。

Admin

コンパイル時の設定
systemd

コンパイル時の設定

systemdアプリケーションを公開してサービスとして登録したいです。 アプリケーションに加えて、アプリケーションをsystemdサービスとして登録するスクリプトも提供したいと思います。 だから私は現在、テンプレートファイルとその値をコピーして更新するスクリプトを使ってmyapp.serviceアプリを公開しています。myapp.service しかし、私はこの解決策が好きではありません。 .serviceコマンドラインからファイルを作成できますか?それはまるでsystemd new -name myapp -description "my description" -after network.target -exec path/to/exec?

Admin

追加読書
ubuntu
systemd
daemon

追加読書

Python 3プロセスを実行するためにUbuntu 16.04でsystemdを使用しようとしています。私はこの記事をフォローしています。Ubuntu 16.04でSupervisorをインストールして構成する方法。 systemd サービスを実行できません。 status コマンドに次のように表示されます。 ● supervisord.service - Supervisor daemon Loaded: loaded (/etc/systemd/system/supervisord.service; disabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Thu 2020-02-13 12:39:03 UTC; 1s ago Docs: http://supervisord.org Process: 19911 ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown (code=exited, status=203/EXEC) Process: 19902 ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf (code=exited, status=203/E Main PID: 19902 (code=exited, status=203/EXEC) 私はこれが何を意味するのか分かるほど、systemdやLinuxについて十分に知りません。 これは私のサービス構成です。/etc/systemd/system/supervisord.service [Unit] Description=Supervisor daemon Documentation=http://supervisord.org After=network.target [Service] ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target Alias=supervisord.service 誰もが間違っていることを説明し、解決策を提案できますか?

Admin