忘れて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「アクティブ」と表示され、デーモンを起動しないことが正式に指定されています。

おすすめ記事