新しく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
今日は、systemd
を使用して新しいDebian8をインストールする最初の時間でした。 デフォルトのinitシステムとして。私はそれについて考えていませんでしたが、最初に/etc/inittab
に驚いていました。 ファイルがありませんでした。
実行中のシステム(@ work&@ home)で、まだsysvinit
を使用してシステムを実行しています そのため、systemd
の経験はありません。 。
古いsysvinit
に変更できることを知っています しかし、systemd
との違いを見たいです 。現在、新しいインストールをカスタマイズしていて、それを完了する時間があまりないので、今はドキュメントを見る時間がありません。
私の質問:systemd
をすばやく変更する方法はありますか --noclear
を追加できるようにする動作 getty
へ /etc/rc.halt
を使用します 再起動/停止の開始点として?
基本的に、古いinittab
をすばやくインポートできますか systemd
への変更 ?
ありがとう
承認された回答:
systemdはSystem5init
と下位互換性がありません 、System 5 rc
のみ 。
Linux System 5スタイルのシステム管理は、init
の2つの部分で構成されています。 これはプロセス#1およびrc
として実行されます 開始スクリプトと停止スクリプトの実行を担当します。これらは実際にはDebianの2つの異なるパッケージからのものです。 init
sysvinitパッケージからのものです。およびrc
通常はsysv-rcパッケージからのものですが、file-rcまたはopenrcパッケージからのものである可能性もあります。
/etc/inittab
init
によって処理される構成ファイルです 。 systemdは、このための下位互換性メカニズムを提供していません。 systemdのSystem5下位互換性メカニズムは、System 5 rc
専用です。 、/etc/init.d/
のプログラムを実行します 。 (rc
の特定のフレーバー専用です 、 さらに。 systemdは、file-rcおよびopenrcの構成メカニズムに下位互換性メカニズムを実装していません。)
これはsystemdに固有のものではありません。ほとんどいいえ 置換init/システムマネージャー(30年に1つの例外を除く)は/etc/inittab
を処理します 。
サービスをsystemdに組み込むには、サービスが実行するメカニズムを使用する必要があります。 サポート、つまり独自のサービスユニット ファイルおよび(ユニットファイルに自動変換するジェネレーターを介して)System 5 rc
/etc/init.d/
の構成ファイル 。
ランレベルを忘れてください。
使用しているランレベルのものはすべて、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 [Install] WantedBy=multi-user.target
シェルスクリプトで自分の貧乏人のデーモンスーパーバイザーをロールバックしないでください。
そのようなことは常にひどく書かれています。
関連:壊れたパイプでtail -f出口を作成しますか?「サービス」が単に「stop_server.sh」という名前のコマンドの実行である場合、これは、手動で実行されるシェルスクリプトサービス管理システムの下でサーバーを停止するスクリプトであると推測されます。
これは、これらのひどく書かれた、厄介で、信頼性が低く、危険な災害のためのものです:stop_server.sh
stop_server.sh
stop_server.sh
stop_server.sh
stop_server.sh
stop_server.sh
あなたはsystemdを持っています。 それを利用し、適切なサービス管理メカニズムを使用して、ここで実行されているサービスを実行します。この奇妙なExecStop
は必要ありません -実際のを作成した場合にのみサービスを提供します DefaultDependencies=true
を使用してsystemd経由で実行可能なサービス 、systemdがサービスのシャットダウンを処理するため シャットダウン時。
1つのサービスを「管理」するシェルスクリプトでPoorMan'sDæmonSupervisorを取得し、それをsystemdサービスユニットでラップして2番目のサービスを作成し、その目的が管理にすぎない場合は、シャットダウン時に開始するように調整します。最初のサービス システムが停止または電源オフになったときにシャットダウンすることは、systemdのHouseofHorrorに入る良い方法です。
世界はあなたにあなたの画面をきれいにすることを望んでいます。
したくない Greg Wooledgeや他の人たちが発見したように、ログオフとその後のログオンの間に仮想端末をクリアすることは、流れに逆らって非常に泳いでいます。ログオフ後に残っている特権ユーザーまたはボスからの機密出力の存在は、1970年代以降、Unices(および実際には他のタイムシェアリングリモートアクセスオペレーティングシステム)のセキュリティ問題であり、すべてを元に戻すには多大な労力が必要です。この問題を回避するために人々が投入したもの。
- 多くのシステムには
clear_console
があります 標準としてシェルログアウトスクリプトのコマンド。 (これは、カーネル仮想端末#1で実行されているグラフィカルプログラムではうまく機能せず、仮想または実在の他の種類の端末では機能しないため、それ自体で問題があります。)このコマンドは削除する必要があります。
-
mingetty
などの仮想端末を対象としたgettyプログラムのデフォルト 、ターミナルをクリアすることです。 (これはログオン前に行われます。つまり、TTYログインサービスが停止した場合でも、端末の出力は消去されないままになります。皮肉なことに、この機能はlogin
に配置したほうがよいでしょう。 、PAMの必需品のおかげで、ログオフ時にまだ実行されています。)--noclear
これを無効にするには、オプションを展開する必要があります。これには、1つ以上のユニットファイルオーバーライドファイルの書き込み、ExecStart
の変更が含まれます。 設定するか、単に[email protected]
をポイントします 自分で考案したローカルユニットファイルで。 - systemdが提供する
[email protected]
テンプレートサービスユニットセットTTYVTDisallocate=yes
これは、systemdにカーネル仮想端末をクリアするように指示します。 (これも、名前に部分的に反映されているように、ユーザースペースの仮想端末でさえも、他の種類の端末では機能しません。)これも削除する必要があります。これも、オーバーライドまたは
[email protected]
が指す別のサービステンプレートを使用して削除する必要があります 。
さらに読む
- ジョナサンデボインポラード(2015)。
/etc/inittab
過去のものです。 。頻繁に与えられる回答。 - https://unix.stackexchange.com/a/196014/5132
- シャットダウンの直前にsystemdでスクリプトを実行するにはどうすればよいですか?
- ジョナサンデボインポラード(2014)。
su
を悪用しないでください ユーザー権限を削除するため。 。頻繁に与えられる回答。 - Greg Wooledge(2014-04-08)。 My GodDamnedConsoleのクリアを停止する 。グレッグのウィキ。
- ジョナサンデボインポラード(2015-08-22)。 DebianJessieで複数のttyを使用してシステムがフリーズする 。 [メールで保護]debian-user。
- https://unix.stackexchange.com/a/194218/5132
- ジョナサンデボインポラード(2015)。 systemd House of Horror 。頻繁に与えられる回答。