web-dev-qa-db-ja.com

/ dev / initctlまたは/ run / initctlを使用して何かを行います

私はRaspberry PiのUPSのコードを調査しています systemdではなくsysv initを使用しています(個人的な好みと親しみやすさ)。特権スクリプト(おそらく/etc/rc.localの一部または/etc/rc.localから実行)が、電源システムに電子が不足していることをinitにどのように伝えるかを調べていましたinit(8)のマニュアルページでは、以前は/etc/powerstatusでしたが、現在は/var/run/powerstatusと次に、initSIGPWRシグナルを送信します。しかし、次のような警告があります。

SIGPWRおよび/etc/powerstatusの使用はお勧めしません。 initを操作したい人は、/run/initctl制御チャネルを使用する必要があります。これに関する詳細なドキュメントについては、sysvinitパッケージのソースコードを参照してください。

Gnu.orgによってホストされている source を見てきましたが、これnew fangledを使用した例は見ていません。 )initのことを伝えるためのインターフェース。

興味深いことに、systemdであるヒュドラーは、このインターフェイスを複製しようとします。これは、何かが存在しないことを好まないと思うのですが、実際にそれを使用するものは見つかりませんでした。そんなことはありますか? UPS関連のソフトウェアの中には、 nutでも、そうは思わない...

この質問は、「Raspberry Pi」に言及しているものの、そのプラットフォームまたはその上で実行されるRaspbianのようなディストリビューションに固有のものではありません。

これらの質問とその回答は、いくつかの関連する詳細を記入する上で非常に啓発的でした。

編集:上記のQ&Aの少なくとも1つは、一部の人が/ dev/initctlを持っている理由と他の人が/ run/initctlを持っている理由も示しています-これは私が気付いていなかったものです(Debianのものでした)。

6
SlySven

Debianでは、次のパッケージが/ run/initctlを使用します:systemd、libvirt、sysvinit、refpolicy、gradm2。 ( https://codesearch.debian.net/ から)。

ランレベルを変更するようにinitに指示するのは通常の方法だと思います。

1

rebootがそれを使用していると思います。 stracerebootを実行します。

# strace -s 128 -f reboot

下のどこかに見えます:

open("/dev/initctl", O_WRONLY)          = 3
write(3, "i\31\t\3\6\0\0\0\0\0\0\0\0\0\0\0INIT_HALT\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384
close(3)

...

open("/dev/initctl", O_WRONLY)          = 3
write(3, "i\31\t\3\1\0\0\0006\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384
close(3)
1
dom