確認できる文書化された方法はありますか?サービス自体で実行されるプログラムのコードからsystemd
、(対話型ログインセッション、cronなどではなく)によって開始されましたか?
.service
現在の回避策は、unit()で環境変数を定義し、Environment=...
その変数が私のコードにあることを確認することです。ただし、直接使用できるものがある可能性があります。
ベストアンサー1
一人はできません。
サービスを呼び出すプロセス(そのパラメータ、環境、それを含む制御グループ、リソース制限、オープンファイル記述子)にsystemdが提供するすべての機能は、他のサービス管理者が実行できます。また、どのサービス管理者がサービスを管理しているかを識別するための共有ルールはありません。一般的な環境変数もなく、他のフラグもありません。
誤ったメカニズム
親プロセスの実行可能ファイル名を解決することも検討できます。これは不可能だからhttps://unix.stackexchange.com/a/196252/5132。親プロセスの実行可能プログラムイメージ(システム全体のサービスに使用される)の名前は/sbin/init
Debian Linuxオペレーティングシステムにあります。 Debianの習慣は、これが実際のプロセス1のプログラムイメージファイルへの代替スタイルシンボリックリンクであり、プログラムがinitramfsからの/init
名前だけを知るだけです。
私が書いたものに関係なく、コントロールグループはシステム化されたタグだと思うかもしれません。そうではありません。以下は、service-manager
noshツールセットとはまったく異なるサービスマネージャが管理するサービスプロセスの制御グループツリーです。
%systemd-cgls /system.slice/service-manager.service/[Eメール保護] 制御グループ/system.slice/service-manager.service/[Eメール保護]: └─[Eメール保護] └─1433tinydns %
プログラムtinydns
はで制御グループを見つけ/proc/self/cgroup
たので、systemdが制御グループを設定すると仮定する理由はありません。実際にユーティリティによって設定されますmove-to-control-group
。
%cat/var/local/sv/[Eメール保護]/サービス/実行 #!/空/ノッシュ #./生成されたファイルの実行[Eメール保護] #127.53.0.1のDNS/UDPソケット udp-socket-listen --systemd-compatibility --combine4and6 127.53.0.1 ドメイン コントロールグループ「../」に移動[Eメール保護]/[Eメール保護]」 環境環境 envuidgid——tinydns-d setlogin——tinydns-d ハード制限-d 3000000 ソフト制限-dハード 。 /提供する %
他のプロセス状態の変更はsystemdに固有ではありません。setenv
(チェーンローディングツール)userenv
または(チェーンmachineenv
ローディングツール)を使用して環境変数を設定し、(チェーンローディングツール)を使用するか、export
リソース制限を設定し、ファイル記述子を使用または開く、名前空間を使用し、予約優先ランクを使用できます。戦略などsoftlimit
ulimit
s6-softlimit
redirfd
fdredir
unshare
rtprio
chrt
numactl
LISTEN_FDS
上記のように、systemdはこのプロトコルの唯一のスポークスマンではありません。繰り返しますが、これはプログラムの先頭に埋め込まれて接続される練習にすぎませんINVOCATION_ID
。これらのどれも指標として信頼できません。env/INVOCATION_ID
run
envdir
概念エラー
によって開始されたプロセスを除外するトラップもありますcron
。ここで概念的な欠陥は、これがcron
サービスであり、これが生成されるプロセスであるということです。このサービスのコンテキストで実行されています。。持ついいえcron
サービスのプロセスによって生成されたプロセスcron
と、他のサービスの他のサービスプロセスによって生成されたプロセスとの間に魔法のような違いがあり、これは前者を後者とは多少異なってしまいます。
この概念的なエラーを取り除くと、答えが表示されます。デーモンは、自分が属する(POSIX)セッションに制御端末がないという点で異なります。その他すべてのログインセッションとの接続(set nameからsetlogin
systemdのユーザースペースログインセッションメカニズムを介してさまざまなセキュリティコンテキストまで)セッションの制御端末が何であるかを照会するための移植可能な直接的な方法はありませんが、パブリック/dev/tty
失敗は間接的な方法で使用できますあります。有望に見えるいくつかのCライブラリ関数は実際には実際には信頼できません。
追加読書
- https://unix.stackexchange.com/a/398951/5132
- https://unix.stackexchange.com/a/187540/5132
- 制御端末の実際の名前を取得するには?
- ツールセット:
- 参考書:
export
。ローランベルコ。 実装する。 skarnet.org.redirfd
。ローランベルコ。 実装する。 skarnet.org.s6-softlimit
。ローランベルコ。 s6。 skarnet.org.- CHPST.runit.smarden.org.
- ジョナサンデボインポラード(2018)。
service-manager
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
move-to-control-group
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
setenv
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
softlimit
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
ulimit
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
fdredir
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
unshare
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2018)。
setlogin
。 スナックガイド。ソフトウェア。