新しくDebian安定システムをインストールして設定することができた一連のスクリプトがあります。プログラムを自動的に起動するには、/etc/rc.local
を使用しますが、それ以外の場合は、/etc/inittab
ファイルを手動で変更する必要がありました。 --noclear
行に1:2345:respawn:/sbin/getty --noclear 38400 tty1
を追加するなど、他の変更もあります。
シャットダウンプロセスをカスタマイズする必要があったため、最終的に次のようにしました。
l0:0:wait:/etc/rc.halt 0
...
l6:6:wait:/etc/rc.halt 6
そして私の/etc/rc.halt
はこのように見えます
#!/bin/sh
#
# rc.halt
#
# This script is executed when entering level 6/0 (on halt or reboot)
su - teststand -c "/home/teststand/stop_server.sh" # my custom command
# making sure the halt/reboot process is resumed
test -n "${1}" && /etc/init.d/rc ${1}
exit 0
今日は、デフォルトのinitシステムとしてsystemd
を使用して新しいDebian8をインストールする最初の時間でした。私はそれについて考えていませんでした、そして最初に/etc/inittab
ファイルが欠落していることに驚きました。
実行中のシステム(@ work&@ home)では、まだsysvinit
を使用してシステムを実行しているため、systemd
の使用経験はありません。
古いsysvinit
に変更できることは知っていますが、systemd
との違いを確認したいと思います。現在、新しいインストールをカスタマイズしていて、それを完了する時間があまりないことに加えて、ドキュメントを見る時間がないのはそのためです。
私の質問:systemd
の動作をすばやく変更して--noclear
をgetty
に追加し、/etc/rc.halt
を再起動/停止の開始点として使用できるようにする方法はありますか?
基本的に、古いinittab
の変更をsystemd
にすばやくインポートできますか?
ありがとう
init
と下位互換性がなく、System 5 rc
のみと互換性があります。Linux System 5スタイルのシステム管理は、プロセス#1として実行されるinit
と、開始スクリプトと停止スクリプトの実行を担当するrc
の2つの部分で構成されます。これらは実際にはDebianの2つの異なるパッケージからのものです。 init
は sysvinit パッケージからのものです。 rc
は通常 sysv-rc パッケージからのものですが、 file-rc または openrc パッケージからのものである可能性があります。
/etc/inittab
は、init
によって処理される構成ファイルです。 systemdは、このための下位互換性メカニズムを提供していません。 systemdのSystem5下位互換性メカニズムは、/etc/init.d/
でプログラムを実行するSystem5 rc
専用です。 (さらに、rc
の特定のフレーバーのみが対象です。さらに、systemdは、file-rcおよびopenrcの構成メカニズムに対して下位互換性メカニズムを実装していません。)
これはsystemdに固有のものではありません。ほとんどnoの置換init /システムマネージャー(30年に1つの例外を除く)は/etc/inittab
を処理します。
Systemdにサービスを組み込むには、サービスが行うサポートするメカニズム、つまり、独自のサービスユニットファイルと(ユニットファイルに自動変換するジェネレーター)/etc/init.d/
内のSystem5 rc
構成ファイル。
使用しているランレベルのものはすべて、systemdLinuxオペレーティングシステムでは「廃止」と宣言されています。 入力する実行レベル0または6はありません。それらは、いくつかの互換性シムがなければ存在しません。
シャットダウン時にサービスを実行するための明白な答えは、多くの人から、WantedBy
shutdown.target
であるサービスユニットを作成することです。ただし、これにはいくつかの微妙な落とし穴があります。より良い、しかしあまり明白ではない答えは、DefaultDependencies=yes
を使用して通常のサービスユニットを作成し、シャットダウンターゲットと競合することを確認し、サービスの要点をではなくExecStop
に配置することです。 ExecStart
。
[Unit] Documentation = https://unix.stackexchange.com/questions/233561/ [Service] Type = oneshot User = teststand RemainAfterExit = true ExecStart =/bin/true ExecStop =/home/teststand/stop_server.sh [インストール] WantedBy = multi-user.target
そのようなことはいつもひどく書かれています。
「サービス」が単に「stop_server.sh」という名前のコマンドの実行である場合、これは、手作業で作成されたシェルスクリプトサービス管理システムの下でサーバーを停止するスクリプトであると推測されます。
これは、これらのひどく書かれた、厄介で、信頼性が低く、危険な災害のためのものです: stop_server.sh
stop_server.sh
stop_server.sh
= stop_server.sh
stop_server.sh
stop_server.sh
systemd.を利用し、適切なサービス管理メカニズムを使用して、ここで実行されているサービスを実行します。 actual サービスをDefaultDependencies=true
を使用してsystemd経由でとして実行可能にすると、この奇妙なExecStop
のみのサービスはまったく必要ありません。 /] systemdは、シャットダウン時にサービスのシャットダウンを処理します。
1つのサービスを「管理」するシェルスクリプトでPoorMan'sDæmonSupervisorを取得し、それをsystemdサービスユニットでラップして2番目のサービスを作成し、目的が最初のサービスを管理するシステムが停止または電源オフになったときにシャットダウンすることは、systemdのHouse ofHorrorに入る良い方法です。
Greg Wooledgeや他の人たちが発見したように、 not がログオフとその後のログオンの間に仮想端末をクリアすることを望んでいることは、非常に流れに逆らっています。ログオフ後に残っている特権ユーザーまたはボスからの機密出力の存在は、1970年代以降、Unices(および実際には他のタイムシェアリングリモートアクセスオペレーティングシステム)のセキュリティ問題であり、すべてを元に戻すには多大な労力が必要です。この問題を回避するために人々が投入したもの。
clear_console
コマンドが標準で含まれています。 (これは、カーネル仮想端末#1で実行されているグラフィカルプログラムではうまく機能せず、仮想または実数の他の種類の端末では機能しないため、それ自体で問題があります。)このコマンドは削除する必要があります。
mingetty
などの仮想端末を対象としたgettyプログラムのデフォルトは、端末をクリアすることです。 (これはログオン前に行われます。つまり、TTYログインサービスが停止した場合でも端末出力は消去されないままになります。皮肉なことに、この機能はlogin
に配置したほうがよいでしょう。これは、PAMの必要性のおかげでまだ残っています。ログオフ時に実行されます。)これを無効にするには、--noclear
オプションを展開する必要があります。これには、1つ以上のユニットファイルオーバーライドファイルの書き込み、ExecStart
設定の変更、または単に[email protected]
を自分で考案したローカルユニットファイルに向けることが含まれます。
[email protected]
テンプレートサービスユニットセットTTYVTDisallocate=yes
は、systemdにカーネル仮想端末をクリアするように指示します。 (これも、名前に部分的に反映されているように、ユーザースペースの仮想端末でさえも、他の種類の端末では機能しません。)これも、オーバーライドまたは[email protected]
が指す別のサービステンプレートを使用して削除する必要があります。
/etc/inittab
は過去のものです。 。頻繁に与えられる答え。su
を悪用しないでください。 。頻繁に与えられる答え。私はCentOS7で作業していますが、セットアップが異なる場合があります。ただし、私にとっては、getty
の呼び出しはサービスファイル/usr/lib/systemd/system/[email protected]
によって制御されます。 (@
はテンプレート用です。[email protected]
として開始され、文字列tty1
がファイルに渡され、実行されるTTYを制御します。)このファイル内には、最初の行があります。 ExecStart=
、コマンドラインを指定します。オプションはここに追加されます。 (システムのアップグレードによって上書きされる可能性があるため、/usr
の下のファイルを直接編集しないことをお勧めします。最初に/etc
の下のどこかに、おそらく/etc/systemd/system
の下にコピーする必要があります。ベンダー提供のファイル。)
シャットダウン/再起動時に必要なものは、シャットダウン/再起動プロセスを直接調整するのではなく、サービスシャットダウンアクションのリストにアクションを追加することによって最適に処理されるように見えます。これは、systemd
が自動的に実行します。システムの停止または再起動(またはsystemctl
を使用してサービスを手動でオフにした場合)。これを行う簡単な方法は、スクリプトをシステムサービスコマンドのExecStop
行に変換することです。設定方法によっては、全体を管理するユーザーサービスファイルを作成し、そこにExecStop
を配置することもできます。