私は何かをする正しい方法を見つけることができません地元の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
。
- 理論的には、ディストリビューションでこれを有効にできない可能性があります。 (たとえば、同じビルドオプションを無効にすると、
poweroff
多くの人が使用する/コマンドも削除されるため、これは一般的ではないと思います。)reboot
- 意味論は完全に明確ではありません。 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つのことがあります。
この機能を有効にするには、を使用する必要があります
systemctl enable my-startup.service
。スクリプトが他のサービス(含む)に依存している場合は、その
network-online.target
サービスを宣言する必要があります。たとえば、行の合計を[Unit]
含むセクションを追加します。Wants=network-online.target
After=network-online.target
Early Startサービス、特にすでに購読しているサービスへの依存関係について心配する必要はありません
basic.target
。これらのサービスは、設定されていない限り、後でmy-startup.service
自動的に順序付けられます。basic.target
DefaultDependencies=no
依存関係の1つが「早期起動」サービスであるかどうかわからない場合、1つのアプローチはを実行して以前に注文した
basic.target
サービスを一覧表示することですsystemctl list-dependencies --after basic.target
。 (はい--after
、いいえ注--before
)。
pre-systemdにも適用されるいくつかの考慮事項があると思いますrc.local
。
- 同じコマンドを制御したい他のプログラムとコマンドが競合しないことを確認する必要があります。
- 従わないことが最善です
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-logind
、systemd-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
をすべきか。 。rc
rc.local
rc
/etc/rc.local
rc
/etc/rc.local
Unixの7番目のバージョンとそれ以前のバージョンにさかのぼります。 AT&T Unix System 3に置き換えられ、/etc/inittab
実行レベルに基づいています(AT&T Unix System 5rc
は若干異なります)。/etc/inittab
1983年。でもそれ今は歴史になりました。
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/
ローカルサービスのバンドルを統括する場所です。rc
FreeBSDではMewburnが使用します/usr/local/etc/rc.d/
。 包装ただし、サービス単位ファイルとサービスパックを作成する場合は、別の場所に保存してください。
追加読書
- Lennart Petlinget al。 (2014).systemd-rc - ローカルジェネレータ。システムのマニュアルページ。 freedesktop.org.
rc.local
。 FreeBSD システム管理者マニュアル。 2016年4月23日。- https://unix.stackexchange.com/a/233581/5132
- レナート・ペトリング(2011-08-29)。
/etc/rc.local
または削除chmod -x
してください。レッドハットのバグ#734268。 - https://unix.stackexchange.com/a/211927/5132
- ダークシュミット(2017-12-19)。
rc.local
まだ始まりは早い。システムエラー#7703 - https://wiki.archlinux.org/index.php?title=Systemd&diff=378926&oldid=378924
- ベンジャミン・ケイン(2011-12-30)。 いつ利用でき、いつ使用できないのですか?
rc.local
。 bencane.com. - https://unix.stackexchange.com/a/49636/5132
- レナート・ペトリング(2010-10-01)。SysV initスクリプトをシステムサービスファイルに変換するには?。 0pointer.de.
- https://askubuntu.com/questions/523369/
- ジョナサンデボインポラード(2015)。
/etc/inittab
それは過去の仕事です。。一般的な答え。 - ジョナサンデボインポラード(2014)。実行中のスクリプトとサービスユニットを並べて表示します。。一般的な答え。
- ジョナサンデボインポラード(2014)。noshを使用してサービスを設定して実行する実際のケース。ソフトウェア。
- ジョナサンデボインポラード(2016)。 」
systemd.unit
マニュアルページにシステム検索パスがありません。」。systemd doco 正誤表。一般的な答え。
答え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が必要です。しかし、特定の初期化システムよりも基本的に、より一般的にインストールされ、アクティブになるようです。