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

Debian11で起動時にスクリプトを実行する方法

簡単に言うと、起動から電源投入してからユーザーが起動するまでの時間を指します。これは、ロードするコードと開始するプロセスとアプリケーションに関する指示を含むブートスクリプトを使用することで実現されます。

Linuxの起動にはいくつかの段階があり(systemdまたはSystem V initで起動する前、デスクトップ環境が読み込まれる前)、単一のコマンドまたはむしろ一連のコマンドまたは実行可能なシェルスクリプト。それでも、さまざまなLinuxディストリビューションとバージョン間で起動手順にいくつかの違いがある可能性があることに注意してください。

Linuxの最新バージョンは、最初に systemdで起動します。 古いバージョンはSystemV initを利用します 。どちらの方法もcronを実行します およびrc.local KDEやGNOMEなどのデスクトップ環境がロードされる前。反対に、サーバーベースのLinuxディストリビューションは、デフォルトのシェル(たとえば、 Bash )を実行します。 ユーザーがデスクトップ環境をロードする代わりにコンソールにログインした後。

Debian 11での起動時にサービスとスクリプトを適切に追加するには、Systemdユニットを作成する必要があります。このガイドでは、Debian11マシンで起動時にスクリプトを追加する3つの方法に焦点を当てます。

  1. systemdの使用
  2. cronの使用
  3. rc.localの使用

始めましょう。

systemdユニットとは何ですか?

Systemdユニットは、特定のシステムファイルを適切に管理または実行するための情報を含む構成ファイルです。 systemdでは、ユニットは、システムが操作および管理する方法を知っているリソースを示します。 Systemdユニットは通常、サービスの開始、停止、管理、ブートプロセスの整理、タスクとプロセスの保守、ソケットの作成、ポイントの自動マウント、ファイルまたはパーティションのスワップ、ファイルシステムのマウント、ハードウェアの初期化に使用されます。

Systemdユニットは、ディレクトリ/ etc / systemd/systemの下に配置されます。 Systemdユニットを使用して起動時に実行するスクリプトは、上記のディレクトリの下のファイル(ユニット)に指定する必要があります。

systemd間の関係を単純化するため およびユニット より良いのは、チームのコーチとしてシステム化されたものを考え、次にユニットをチームのアメニティや必需品として考えてください。たとえば、ボール、トウモロコシ、ジム、競技場、キットをプレイすることです。そのため、コーチがチームを管理してパフォーマンスを向上させるために、利用可能な機器を利用してチームを大幅に改善します。同様に、systemdはユニットを使用してシステムプロセスとサービスを制御および管理します。

Systemdユニットタイプには次のものがあります。
  • ターゲット– 同期ポイントを説明するユニットのコレクション。同期ポイントは、起動時に特定の状態でシステムを起動するために使用されます。
  • マウント– この種のユニットは、ファイルシステムのマウントポイントを制御します。
  • デバイス– このタイプのユニットは、デバイスドライバーのようなデバイスベースのアクティベーションを実現します。
  • ソケット– このユニットタイプは、サービスがリスニングソケットで着信トラフィックを取得したときにサービスをアクティブにします。
  • パス– このユニットタイプは、ファイル/ディレクトリを監視し、指定されたファイルまたはディレクトリが取得された場合にサービスをアクティブ化/非アクティブ化します。
  • タイマー– このユニットタイプは、タイマーに基づいて、または設定された時間が経過したときに、指定されたサービスのアクティブ化と非アクティブ化を行います。
  • 範囲– 外国のプロセスを体系化して管理するユニット。

systemdユニットの一覧表示

以下は、 lsを使用したシステム内の既存のsystemdユニットのクイックビューです。 コマンド。

 ls / etc / systemd / system 

上記のスナップショットで除外されているファイルの1つはtomcat.serviceであり、その内容は次の画像に表示されているとおりです。

上記のスナップショットのユニット構成ファイルに慣れるには、次の詳細情報を参照してください。スクリプトを実行するために作成するユニットは少し単純になるので、心配する必要はありません。

ユニットディレクティブには次のものが含まれます;
  • 説明: このディレクティブでは通常、ユニットの説明を追加できます。ここで、確認するユニット名を設定できます。
  • 希望: ユニットの依存関係は、ここで習慣的に指定されます。注意すべき点は、この同様の目的のためにさまざまな指令があるということです。たとえば、ディレクティブ Requireds 厳密な依存関係を規定しており、それがないとユニットは機能しません。 Requiredとは異なり、Wantsは、ユニットが動作を継続できる依存関係を指定する際に使用されます。
  • 後: 現在のユニットは、このディレクティブで指定されたユニットの後に開始されます。
[サービス]セクションディレクティブ:

  • タイプ: フォークは、プロセスID(PID)を割り当てる必要がある子プロセスを保持しながらサービスを強制終了することを示します。
  • 環境: ここで、ユニット環境変数を指定できます。
  • ExecStart: このディレクティブを使用すると、実行するパスとコマンドを指定できます。
  • ExecStop: ユニットを停止するために使用されるコマンドを述べることができます。
  • SuccessExitStatus: このディレクティブを使用すると、終了ステータスとシグナルを列挙できます。
  • ユーザー: ユニットのユーザー所有者を特定できます。
  • グループ: ユニットのグループ所有者を列挙できます。
  • UMask: ユーザーマスクを指定できます。
  • RestartSec: ユニットが自発的に再起動する場合は、サービスの再起動を待機する時間を指定できます。
  • 再起動: ユニットを再起動する必要がある場合は、Systemdの概要を説明できます。アクセス可能なオプションは、常に監視中、失敗時、異常時、成功時、および中止時です。

上記のインスタンスの[Install]ディレクティブはWantedByです。

  • WantedBy: このディレクティブを使用すると、ユニットの概要を依存関係として示すことができます。 Wantsに似ています ディレクティブですが、現在のユニットが別のユニットによる依存関係としてよく考えられているかどうかを指定します。

前のスクリーンショットに組み込まれていなかった[ユニット]セクションの他の通常のディレクティブ:

  • 必要条件: このディレクティブでは、ブートの失敗を回避するための依存関係を指定できます。 ウォンツに反対 ディレクティブ。ディレクティブRequiresで指定された依存関係が満たされない場合、ユニットは機能しません。

[サービス]セクション:

  • PIDFile: forkingディレクティブには、Systemdがそれを検出するための子プロセスのファイルPIDへのパスを持つPIDFileディレクティブが必要です。
  • StartLimitInterval: ユニットが失敗時に再起動を10回試行するのに60秒かかることを指定します。
  • StartLimitBurst: このディレクティブは、前の例では60秒間に10回の試行の制限を示しています。

Systemdユニットの詳細については、このリンクにアクセスしてください。

Debian11での起動時にスクリプトを実行する

方法1:systemdユニットを使用して起動時にスクリプトを実行する

起動時にスクリプトを実行するのは簡単で、以前にユニットの共通コンテンツを表示するために使用したtomcat.serviceファイルよりも構成が少ない場合があります。

起動時に実行されるスクリプトに関する情報を持つファイル(ユニット)は、/ etc / systemd/systemに配置されます。起動時に実行するスクリプトを表現するには、このスクリプトの新しいユニットを生成する必要があります。そのため、作成目的で任意のエディターを利用できます。ただし、この例では、script.serviceという名前のユニットを作成するnanoエディターを使用します。スクリプトを簡単に識別できるように、この名前を任意の設定に変更できることに注意してください。

 sudo nano /etc/systemd/system/script.service 

その後、次のコードをコピーして、/ etc / systemd/systemの下に生成したファイルに貼り付けます。

とスクリプトへのパス。[Unit]Description=スクリプト名hereAfter=default.target [Service] ExecStart =/ PATH / TO / Script.sh [Install] 

その後、以下に示すように、をスクリプト名に、をスクリプトへのパスに置き換えることを忘れないでください。

/ etc / systemd / system /の下のファイルにデータをコピーした後、以下に表示されるsystemctlコマンドを使用してデータを有効にする必要があります。

 sudo systemctl enable script.service 

注: をユニットに割り当てた適切な名前に置き換えることを忘れないでください。

そしてブーム!これで、Debian11でスクリプトを起動する準備が整いました

方法2:Cronを介してLinuxの起動時にプログラムを自動的に実行する方法

Cronは、スケジュールされたコマンドを実行するために使用されるデーモンです。コマンドはクラウンジョブテーブルまたはコントラブに保存され、システム内の各ユーザーに固有です。これは、System V initまたはsystemdのいずれかによってシステムの起動中に起動されます。次の手順を慎重に実行することで、システムの起動中にジョブまたはプログラムを実行するようにスケジュールできます。

ステップ1: 次のコマンドを実行して、デフォルトのコントラブエディタを開きます。

 crontab -e 

初めてcontrabコマンドを実行する場合は、次のコードに示すようにエディターを選択する必要があります。

 $ crontab -eno crontabforuser-空の1つを使用エディターを選択します。後で変更するには、「select-editor」を実行します。 / bin /nano<----最も簡単2。 /usr/bin/vim.basic3。 / bin / edChoose 1-3 [1]:

指定された数のオプションを選択すると、コントラブが作成され、ユーザーの権限を使用して実行されます。プログラムをrootユーザーとして実行する必要がある場合は、rootユーザー自体としてcontrab-eを実行してください

ステップ2: @reboot

で始まる行を追加します
#m h dom mon dow command @ restart 

ステップ3: 以下に示すように、@rebootの後にプログラムを開始するための優先コマンドを挿入します。

 @reboot / sbin / ip addr | grep inet \ |テール-n1| awk'{print $ 2}'> / etc / issue &&echo "">> / etc / issue 

@rebootは、システムの起動中に実行されるタスクを定義します。

注: システムとの競合を避けるために、可能な限りプログラムのフルパスを使用し、コマンドを1行で記述してください。

ステップ4:ファイルを保存する

「Ctrl+x」を使用してエディターを閉じた後 以下に示すように

次に「Y」 保存するには

「新しいコントラブをインストールしています」というコマンドが表示されます。 以下に示すようにターミナルで:

ステップ5:構成

最後に、コントラブが正しく構成されているかどうかを確認するためのチェックを実行できます。ただし、この手順は必須ではないことに注意してください

 crontab -l <​​/ pre>  

そして、それでうまくいくはずです、みんな!

方法3:RC.LOCALを介してLinuxの起動時にプログラムを自動的に実行する方法

rc.localは、SystemVinitシステムからの単なるレガシーです。これは、デスクトップ環境のログイン画面またはターミナルのログインプロンプトに進む前に実行する最後のスクリプトです。通常はBashシェルスクリプトであり、スクリプトから何でも実行できます。次の手順を使用して、ローカルrc.localスクリプトを構成します。

ステップ1: 最初に、/ etc / rc.localファイルがシステムに存在しない場合は、好みのエディターを使用してrootユーザーとして作成します。この例では、次のコマンドを実行してViエディターを使用します。

 sudo vi /etc/rc.local 

ステップ2: プレースホルダーコードを追加する

その後、次のプレースホルダーコードをファイルに追加します

#!/ bin / bashexit 0 

インタプリタ(/ bin / bash)で始まり、終了コード(成功を示す0)で終わる必要があります。

ステップ3: コマンドとロジックを追加する

ここでは、必要に応じてコマンドとロジックをファイルに追加します。

 / sbin / ip addr | grep inet \ |テール-n1| awk'{print $ 2}'> / etc / issueecho "">> / etc / issue 

次のスナップショットで、これがどのように行われるかを垣間見ることができます。

ステップ4:ViEditorを保存して終了します

Vimエディターでファイルを保存して終了するには、「:wq」を使用します 指図。ファイルを保存し、同時にエディターを終了して、ファイルを実行可能にするコマンドを実行します。そのため、ESCを押すと通常モードに切り替わります。その後、:wqと入力し、「Enter」を押します。

ステップ5: ファイルを実行可能にする

ファイルを保存したら、次のコマンドを使用してファイルを実行可能にする必要があります。

 sudo chmod a + x /etc/rc.local 

次に、システムの起動時にrootユーザーとしてファイルを実行する必要があります。

結論

結論として、Systemd、cron、およびrc.localを使用してDebian11で起動時にスクリプトを実行するのは比較的簡単です。 Linuxユーザーなら誰でも、unitsディレクトリ内に単純なファイルを作成することでこのタスクをすばやく完了することができます。この記事では、Linuxディストリビューション、特にDebianの起動時にスクリプトを実行するさまざまな方法について説明しました。

それぞれに長所と短所がありますが、一般的に言えば、systemdとcronが最も好ましいオプションです。反対側では、これも調べたrc.localを使用することもできます。


Debian
  1. utorrent起動スクリプト/起動時にutorrentを実行– Ubuntu 14.04 / 14.10

  2. Debian –64ビットのDebian/ ubuntuで32ビットのプログラムを実行する方法は?

  3. シャットダウン直前にsystemdでスクリプトを実行する方法は?

  1. Bashスクリプトを実行する方法{7メソッド}

  2. スクリプトを実行する方法??

  3. メール サーバーにメールが届いたときにスクリプトを実行する方法は? (デビアン)

  1. Debian Sidを(比較的)安全に実行する方法

  2. Windows10とDebian10をデュアルブートする方法

  3. Debian11にJava17(JDK 17)をインストールする方法