忘れてrc.local...

忘れてrc.local...

私は何かをする正しい方法を見つけることができません地元のsystemdのスクリプト(または非常にローカルなコマンド)、私はそのようなスクリプトのためのサービス(systemdの単位で)を生成できないことを既に知っています(または生成する必要がありますか?)...

私が見つけた回避策は、rc.localを作成して実行権限を付与することでした。

printf '#!/bin/bash \n\nexit 0' >/etc/rc.local 
chmod +x /etc/rc.local

たとえば、単純なrc.localを構成する古いサーバーを持っている場合は、何をしたのか、rc.localが外部パッケージで尊重されているため、ディストリビューションに新しいものをアップグレードまたはインストールするのがどれほど有害かを知ることができます。 。しかし、一方で簡単な作業を完了するためにサーバーをインストールし、システムデバイスの1つまたは2つまたは3つ(またはsysvinitサービス)を作成する場合、これは時々あなたの人生をはるかに複雑にします。私のユニット名よりも難しいのは、いつかデプロイメント開発で作成され、アップグレード時にインストールされる可能性がある新しいサービスの名前と競合し、スクリプトに問題を引き起こす可能性があります。

わかります別の問題尋ねるrc.localはどこにありますか?答えはそれを作成し、実行権限を与えることです。私の質問は実際にいいえコピーなぜなら、私はそれがどこにあるのか知りたくないからです。私の言葉を信じてください。私はただ知りたいだけです。受け入れるこれは廃止ところで、このようなことをきちんとできる方法が見つかりませんが、このような簡単なことのために本当にユニットを作らなければなりませんか?

答え1

rc-local.service他の場所で述べたように、以下で使用するとかなり汚れている可能性がありますsystemd

  1. 理論的には、ディストリビューションでこれを有効にできない可能性があります。 (たとえば、同じビルドオプションを無効にすると、poweroff多くの人が使用する/コマンドも削除されるため、これは一般的ではないと思います。)reboot
  2. 意味論は完全に明確ではありません。 Systemdは1つの方法を定義しますrc-local.serviceが、Debianは少なくとも1つの重要な設定を変更する組み込みファイルを提供します。

rc-local.serviceよく動作します。上記のことが気になる場合は、単にコピーして作ることもできます!これは魔法です:

# /etc/systemd/system/my-startup.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/libexec/my-startup-script

[Install]
WantedBy=multi-user.target

すべての詳細[*]を知る必要はないようですが、ここで知っておくべき2つのことがあります。

  1. この機能を有効にするには、を使用する必要がありますsystemctl enable my-startup.service

  2. スクリプトが他のサービス(含む)に依存している場合は、そのnetwork-online.targetサービスを宣言する必要があります。たとえば、行の合計を[Unit]含むセクションを追加します。Wants=network-online.targetAfter=network-online.target

    Early Startサービス、特にすでに購読しているサービスへの依存関係について心配する必要はありませんbasic.target。これらのサービスは、設定されていない限り、後でmy-startup.service自動的に順序付けられます。basic.targetDefaultDependencies=no

    依存関係の1つが「早期起動」サービスであるかどうかわからない場合、1つのアプローチはを実行して以前に注文したbasic.targetサービスを一覧表示することですsystemctl list-dependencies --after basic.target。 (はい--after、いいえ注--before)。

pre-systemdにも適用されるいくつかの考慮事項があると思いますrc.local

  1. 同じコマンドを制御したい他のプログラムとコマンドが競合しないことを確認する必要があります。
  2. 従わないことが最善ですrc.local

[*]ほとんどのワンタイムスクリプトに適しているため、Type=oneshot+を使用してください。RemainAfterExit=yes一連のコマンドを実行すると、完了するとmy-startup「アクティブ」と表示され、デーモンを起動しないことが正式に指定されています。

答え2

忘れてrc.local...

〜のようにCentOS 7について話しています。そしてDebian 8についてそしてUbuntu 15について:

systemd+Linux オペレーティングシステムを使用しています。 van Smoorenburg System 5クローンの/etc/rc.local互換性メカニズムである以前のバージョンとの互換性メカニズムであるため、systemdのデュアル以前のバージョンとの互換性メカニズムです。rc

/etc/rc.local重大なエラーが発生する可能性があります。人々は、rc.localブートローダの同じ場所であるsystemdの実行方法が以前とは異なることに驚きました。 (または誤って予想:実際には実行されません。最後OpenBSDのマニュアルにはまだ記載されています。 )他の人々は、以前の作業方法を期待して作成したものがrc.local新しいudevルール、NetworkManager systemd-logindsystemd-resolvedまたはさまざまな「スイート」に置き換えられることに驚きました。

「https://unix.stackexchange.com/questions/389289/」に示すように、一部のオペレーティングシステムはすでにsystemdを提供しています。いいえ以前のバージョンとの互換性機能systemd-rc-local-generator発電機など同時に、Debianはまだ以前のバージョンとの互換性機能を維持しています。Arch Linuxをビルドするときは、systemdをオフにしてください。。したがって、Archとそれが期待するオペレーティングシステムでは、/etc/rc.local 完全に無視される

忘れてrc.local...これは行く道ではありません。 systemd+Linux オペレーティングシステムがあります。したがって、適切なシステムサービスユニットを作成し、以前のバージョンとの2つのレベルの互換性以外の場所で起動しないでください。 (UbuntuとFedoraでは、サム数回削除した後、その後のvan Smoorenburg System 5rcクローンをrc.local削除した。それ自体を2回10年以上前に最初は新会社に置き換えられ、その後はsystemdに置き換えられました。 )

まだ覚えているsystemdに移行するための最初の規則

これはsystemdに関連する新しいアイデアではありません。 van SmoorenburgとUpstartシステムで何rcをすべきか。 。rcrc.localrc/etc/rc.localrc

/etc/rc.localUnixの7番目のバージョンとそれ以前のバージョンにさかのぼります。 AT&T Unix System 3に置き換えられ、/etc/inittab実行レベルに基づいています(AT&T Unix System 5rcは若干異なります)。/etc/inittab1983年。でもそれ今は歴史になりました。

nosh toolsetのサービスバンドルservice-manager、Mewburnのスクリプトsystem-control、systemdのサービス単位ファイル、Upstartの作業ファイル、runit/s6/daemontoolsのサービスディレクトリ-encore、van Smoorenburgのスクリプトなど、サービス管理システムに適した基本サービス定義を作成します。 。/etc/rc.d/rc/etc/init.d/rc

/etc/systemd/system/systemdでは、これらの管理者によって追加されたサービス単位ファイルは通常(または/usr/local/lib/systemd/system/まれに)入ります。 nosh サービスマネージャは、/var/local/sv/ローカルサービスのバンドルを統括する場所です。rcFreeBSDではMewburnが使用します/usr/local/etc/rc.d/包装ただし、サービス単位ファイルとサービスパックを作成する場合は、別の場所に保存してください。

追加読書

答え3

要約https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd

/etc/systemd/system/rc-local.service を生成します。

# /etc/systemd/system/rc-local.service
[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local

[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99

[Install]
 WantedBy=multi-user.target

それから:

sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local

調べる:

sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

答え4

クローナ @reboot起動プロセスの一部ではなく、システムの再起動後に「すぐに」発生する必要があるタスクをサポートすることは、使用中の初期化システムに対するあらゆる種類の注意を置き換えるための良い方法です。

警告:ISC Cronが必要です。しかし、特定の初期化システムよりも基本的に、より一般的にインストールされ、アクティブになるようです。

関連情報