GNU/Linux >> Linux の 問題 >  >> Linux

古いSysvinitの習慣をSystemdに移植しますか?

新しく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 。頻繁に与えられる回答。
関連:/ etc / network / interfaces構文の詳細な説明はありますか?
Linux
  1. Linuxサーバーを停止するためのこれらのコマンドの違いは?

  2. Linux –システムがSysv、Upstart、またはSystemd Initsystemを使用しているかどうかを確認する方法は?

  3. Linux – SystemdのすべてのデーモンにデフォルトのCPUアフィニティを設定するにはどうすればよいですか?

  1. systemv init と比較して、systemd のセキュリティへの影響は何ですか?

  2. systemd ユーザー サービスをシステム ターゲットに依存させる

  3. cron の代わりに systemd タイマーを使用する

  1. Centos – / usr / lib / systemd/systemと/etc/ systemd / systemの違いは何ですか?

  2. 修正システムは、initsystemエラーとしてsystemdで起動されていません

  3. systemd のインストール後、システムが SSH を拒否し、「起動中」のままになる