ボーナスポイント

ボーナスポイント

私は現在、システムの起動/起動時にスクリプトの実行とクローンの実行init.dの違いを理解しようとしています。@reboot

使用@reboot(この方法は以下で使用されます。このフォーラム渡すチャンドラ)は簡単です。入力してcrontab -e1つを作成する@reboot /some_directory/to_your/script/your_script.txtと、your_script.txtシステムが再起動されるたびに実行されます。詳細な説明@rebootここ

または挿入/etc/init.d/your_script.txtして2行目あなたのスクリプトは次のとおりです

#!/bin/bash
# /etc/init.d/your_script.txt

実行でき、システムが起動するたびに実行する必要がありますchmod +x /etc/init.d/your_script.txtyour_script.txt

  1. 2つの主な違いは何ですか?
  2. どちらが強いですか?
  3. どちらに良いものがありますか?
  4. 起動中に実行するスクリプトを含める正しい方法ですか?

起動時に実行するbash .shファイルをマージします。

答え1

init.dSysVスクリプトとも呼ばれ、システムの初期化およびシャットダウン中にサービスを開始および停止するために使用されます。 (/etc/init.d/互換性のためにシステムが有効になっているシステムでもスクリプトを実行できます。)

  • このスクリプトは開始および終了中に実行されます(デフォルトでは)。
  • スクリプトは単純なスクリプトではなくinit.dスクリプトでなければなりません。startそれ以上をサポートする必要がありますstop(参照:Debian ポリシー)
  • スクリプトを実行できます。期間システムが起動します(いつ定義できます)。

crontab(したがって@reboot)。

  • cronは一般的なコマンドやスクリプトを実行し、ここでは特別なものはありません。
  • すべてのユーザーが@rebootスクリプトを追加できます(ルートだけでなく)。
  • systemdのあるDebianシステムでは、cronの@rebootがmulti-user.target
  • SysV(systemdではない)を持つDebianシステムでは、crontab(5)は次のように言います。@reboot の場合、cron(8) デーモンの起動時に開始されます。具体的には、一部のシステムデーモンやその他の機能が開始される前である可能性があります。これは機械の始動順序によるものです。
  • 起動時と定期的に同じスクリプトをスケジュールするのは簡単です。

/etc/rc.localしばしば醜いまたは反対していると考えられています(少なくとも赤い帽子)、しかしまだいくつかの良い機能があります。

  • rc.local は一般的なコマンドやスクリプトを実行し、ここでは特別なものはありません。
  • SysV(systemdではない)を持つDebianシステム:(rc.localほぼ)最後のサービスが開始されました。
  • しかし、systemdを持つDebianシステムでは、デフォルトで後でrc.local実行されます(いいえ!)network.targetnetwork-online.target

systemdnetwork.targetとについてnetwork-online.target読んでください。ネットワーク接続後のサービスの実行

答え2

まず、次のことを明確にする必要があります。

  • 初期化ファイルhttpdたとえば、サービス制御スクリプトが保存されるディレクトリです。制御スクリプトはサービスの開始と停止を制御できます。cron
  • ローカルファイルシステムの起動中に任意のスクリプトを実行できるサービス。

rc.localスクリプトの使用とスクリプトの実行のどちらが良いかについては、実用性よりも審美的なcron問題に近いと思います。cronタスクスケジューラとして、更新チェック、キャッシュクリア、セキュリティ監査の実行などのシステムメンテナンスを実行する方法として設計されています。これは、特定の時間に必要なスクリプトやコマンド(たとえば)を実行できるため、これらの機能の実行に限定されるわけではありません@reboot

rc.local一方、使用法はシステム構成タイプの操作に近いです。これはrc.local、通常、システムのネットワーク構成、サービス、または環境設定を担当するシステムの初期化システムによって実行されるためです(再度これに限定されません)。このタスク)。

rc.localただし、すべてのinitシステムがメカニズムを提供するわけではなく、すべてのcronデーモンが疑似表示を@reboot提供しているわけではないため、両方のことを軽減する必要があります。

ボーナスポイント

前述のように、init.dこのディレクトリには、システム(少なくともSysVinitタイプのシステムを使用するコンピュータ)で起動または停止できるサービスを制御するスクリプトが含まれています。初期化システムとスクリプトの目的に応じて、スクリプトを次に変換します。初期化スクリプトサービスと同じ方法で実行されます。ただし、これらのファイルを構築する方法のフレームワークは大きく異なる可能性があるため、これはinitシステムによって大きく異なります。

最後の馬

通常、bashスクリプトはサフィックスで.shはなくサフィックスで終わります。.txtこれは、そのファイルがテキストファイルではなくシェルスクリプトであることをすぐに示すためです。つまり、それがある限りシェルボーン#!/bin/bash)ファイルの上にあるか、bash /path/to/script.whateverスクリプトの実行には重要ではありません。

答え3

以下に答えを書きます。

  1. 2つの主な違いは何ですか?

上記の他のユーザーが言及した違いに加えて、@rebootがcrondデーモンに依存していることを強調したいと思います。 crond が始まる順序に依存します。ほとんどの場合、crondはうまく起動しますが、時には起動できないことがあります(少なくとも私のプロジェクトの中には失敗を見たことがあります)。 initスクリプトを書くときにスクリプトが何か間違っていると、通常エラーが発生します(たとえば、サービスの後に開始されるサービスに依存)。

  1. どちらが強いですか?

上記の内容に基づいて、initがより強力だと思います。ところで、最初の回答で「フランクリンフィアット」が言及したもう一つの点がある。通常、デーモンの初期化スクリプトが必要であり、次の戦略に従う必要があります。

  1. どちらに良いものがありますか?

私はそうは思いません(rc.localは少し古く、もう使用されていません)

  1. 起動中に実行するスクリプトを含める正しい方法ですか?

はい。通常、アプリケーション/パッケージ作成者はこれを行います。

関連情報