Linux
 Computer >> コンピューター >  >> システム >> Linux

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

この記事では、Linux CentOS /RHEL7/8でサービスとスクリプトを自動的に開始するように構成する方法の基本を学びます。特に、 systemdについて知ることができます。 デーモン、スタートアップにサービスを追加したり、スタートアップからサービスを削除したりする方法を学び、Linuxでの起動時にスクリプトまたはデーモンを開始する別の方法を検討します。

この記事は、Linuxで自動的に開始されるサービスまたはスクリプトのリストをすばやく見つけ、サービスまたはスクリプトを追加して起動するか、一部のアプリの自動起動を無効にする方法を教えることを目的としています。

Systemctlを使用したLinuxでのSystemdサービスの管理

最も人気のあるLinuxディストリビューション(CentOS、RHEL、Debian、Fedora、Ubuntu)は systemdを使用します init.dの代わりに起動デーモン 。 システム化 は、他のデーモンを起動して管理するために使用されるLinuxサービスマネージャーです。 / etc / systemd / systemのユニットファイルを使用します ( init.d /etc/init.d/のスクリプトを使用 )。 Systemdを使用すると、OSの起動時にサービスの起動を並列化できます。

systemdを管理するには、 systemctl コマンドが使用されます。

まず、システムを起動した後、 systemdで使用可能なユニットのリストを確認します :

systemctl list-units

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

次のコマンドを使用して、ユニットファイルのリストを取得できます。

systemctl list-unit-files

このコマンドは、使用可能なすべてのユニットファイルを表示します

アクティブなサービスとその状態のリストを表示するには、次のコマンドを実行します。

#systemctl list-units -t service

一部のユニットは起動後に非アクティブになる可能性があるため、 —すべてを使用して完全なリストを取得できます オプション。

#systemctl list-units --all

UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
● exim.service not-found inactive dead exim.service
firewalld.service loaded active running firewalld - dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
● iptables.service not-found inactive dead iptables.service
Bring up/down networking
● NetworkManager-wait-online.service not-found inactive dead

リストからわかるように、ディスク上にないサービスも表示されます。

また、他のフラグを使用することもできます。例:

  • -状態 —デーモンの状態を検出するために使用されます:Load、Active、Sub
  • -タイプ —タイプでユニットをフィルタリングできます

例:

systemctl list-units --all --state =active -アクティブなsystemdユニットのリストのみを表示します

systemctl list-units —type =service —サービスであるユニットのリストを表示します

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

Systemdでサービスを作成するには?

サービスを管理するために、systemdは特別な構文を使用しています。 .serviceを追加する必要があります サービスの名前の後。例:

#systemctl enable nginx.service –コマンドはnginxWebサーバーをスタートアップに追加します

このコマンドは、 systemdのserviceコマンドで指定されたファイルへのシンボリックリンクを作成します スタートアップディレクトリ。

#systemctl enable nginx.service

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service
コマンドの出力には、サービスファイルへのシンボリックリンクが作成されたディレクトリが表示されます。

サービスがスタートアップに追加されているかどうかを確認するために、そのステータスを取得できます:

systemctl status nginx.service

出力の次の行に注意してください:

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

有効 値は、このサービスがLinuxスタートアップに追加されることを意味します。サービスが自動的に開始されない場合は、無効が表示されます ここ。

Systemdでサービスを無効にする方法

Linuxブートで開始されないように、起動からサービスを削除できます(サービス自体は削除されません)。サービスの起動を無効にするには、次のコマンドを実行します。

#systemctl disable your_service

たとえば、nginxの自動起動を無効にするには:

#systemctl disable nginx.service

Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service

これを実行すると、サービスファイルへのシンボリックリンクがsystemdディレクトリから削除されます。サービスが自動的に開始されるかどうかを確認できます:

#systemctl is-enabled nginx

Systemdでユニットをマスクする方法

いくつかの邪悪なサービスに出くわしましたが、それらを無効にした後もスタートアップにとどまり、Linuxの再起動後に開始しました。この問題を解決するために、サービスをマスクすることができます:

#systemctl mask nginx.service

その後、手動でもOSの再起動後も起動しません:

#systemctl mask nginx.service

Created symlink from /etc/systemd/system/nginx.service to /dev/null.

#service nginx restart

Redirecting to /bin/systemctl restart nginx.service
Failed to restart nginx.service: Unit is masked.

次のコマンドを使用して、サービスのマスクを解除できます。

#systemctl unmask nginx.service

Removed symlink /etc/systemd/system/nginx.service.

サービスをマスクした後、ユニットファイルを確認すると、サービスがマスクとしてマークされていることがわかります。 :

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

Rc.localでスクリプトまたはサービスを実行する

Linuxブートでさまざまなスクリプトを実行するには、 rc.local よく使われます。

スクリプトに加えて、 rc.localを使用します systemd を使用して開始されたサービスでも、サービスを実行できます。 。 systemdがある場合、なぜrc.localを使用する必要があるのか​​わかりませんが、ここにいくつかの例を示します。

まず、 /etc/rc.local 実行可能である必要があります:

chmod + x /etc/rc.local

Rc.localをsystemdautostartに追加する必要があります:

systemctl enable rc-local

そして、 nginxを開始するコマンドを追加できます rc.localへのWebサーバー :

service nginx start

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

しかし、私はめったに rc.localを使用しません サービスを開始します。多くの場合、rc.localは、スクリプトを開始したり、コマンドを1回実行したりするために使用されます。

たとえば、スクリプト /root/test.shを作成しました それは何かをするので、起動直後に実行したいと思います。 rc.localファイルに次の行を追加します。

sh /root/test.sh

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

CentOS 7以降、開発者は rc.local は廃止されたデーモンであり、スクリプトやサービスの開始に使用することはお勧めしません。でも、とてもシンプルなので、まだ動かしているうちに使っています。

SystemdでLinuxサービスを作成するには?

独自のデーモンを作成し、systemdを介して管理できます。

たとえば、同じスクリプト( /root/test.sh )を開始するとします。 )システムが再起動されるたび。新しいサービスのファイルを作成することから始めましょう:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano / etc / systemd / system/test-script。サービス

ファイルの内容は次のとおりです。

[Unit]
Description=Template Settings Service
After=network.target
[Service]
Type=oneshot
User=root
ExecStart=/root/test.sh
[Install]
WantedBy=multi-user.target

主なパラメータは次のとおりです。

ユーザー –デーモンの起動元のユーザーアカウント

Type =oneshot — systemdは、他のユニットを続行する前に、プロセスが終了するのを待つ必要があります

確認して再起動してください:
#systemctl daemon-reload
#systemctl start test-script.service
#systemctl status test-script.service

● test-script.service - Test
Loaded: loaded (/etc/systemd/system/test-script.service; disabled; vendor preset: disabled)
Active: active (running)

サービスが正常に機能する場合は、systemdスタートアップに追加します:

#systemctl enable test-script.service

Created symlink from /etc/systemd/system/multi-user.target.wants/test-script.service to /etc/systemd/system/test-script.service.

したがって、systemdを介して自動起動および管理するスクリプトを追加できます。

Cronを使用してスクリプトを実行する方法

スクリプトまたはコマンドを一定の頻度で実行する場合は、 cronを使用できます。 :

crontab -e —エディターを開いてcronタスクテーブルを変更します

そして、ここに必要なタスクを追加します。例:

* * * * * /root/test.sh —スクリプトを1分に1回実行します。

ウォッチドッグを書くことができます サービスのステータスをチェックするスクリプト。サービスが実行されていない場合は、スクリプトがサービスを開始します。一部のプロジェクトでも同様の方法を使用しています。

すべてのタスクのリストをcronで表示するには、次のコマンドを実行します。

#crontab -l <​​/ code>

* * * * * /root/test.sh

cronタスクを順番に実行するために使用可能な時間値:

  • 分:0-59
  • 時間:0-59
  • 月の日:1-31
  • 月:1〜12
  • 曜日:0〜7(0または7は日曜日)

このタスクでは、スクリプトは1分に1回実行されるため、そこに*アスタリスク*があります。

スクリプトをcronのいずれかに配置することもできます ディレクトリ:

  • /cron.daily –1日に1回実行されるスクリプトの場合
  • /cron.hourly –1時間に1回実行されるスクリプトの場合
  • /cron.monthly —月に1回実行されるスクリプトの場合
  • /cron.weekly —週に1回実行されるスクリプトの場合

指定されたディレクトリ内のスクリプトは、自動スケジュールに従って実行されます。

Bashスタートアップスクリプト:.bashrc

SSHの開始時にいくつかのアクションを実行する場合 コンソールでは、任意のコマンドまたはスクリプトを .bash_profileに追加できます または.bashrc ファイル。理論的には、これらのファイルのいずれかにアクションを追加できます。どのような場合でも実行されます。通常、必要なものは.bashrcに追加され、.bashrcは.bash_profileから開始されます。

.bashrcファイルにnginxWebサービスを再起動するコマンドを追加しました:

service nginx restart

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

次に、ファイルを保存してSSHセッションを再開しました:

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

ご覧のとおり、ターミナルを起動すると、Webサーバーも再起動されています。ターミナルの起動時に実行できるアクションは何ですか? 稼働時間などの追加のツールである可能性があります サーバーチェック:

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

または、特定のディレクトリにアクセスして mcを開始する場合 sshコンソールを実行するときは、 .bashrcに以下を追加します :

cd / var /
mc

CentOS / RHELでサービスとスクリプトの起動を管理する方法は?

LinuxでLinuxサービスまたはスクリプトの起動を管理する方法に関するこの記事がお役に立てば幸いです(この記事はCentOSとRHEL向けに書かれていますが、他のディストリビューションにも適しています)。この情報は、Linuxシステム管理の基礎を学ぶ人々にとって役立つと確信しています。


  1. ERD Commander Autoruns を使用してスタートアップ プログラムを管理する方法

    以前は、スタート メニューのスタートアップ フォルダにエントリを追加するか、レジストリの Run キーに値を追加することで、ソフトウェアが自動的に起動していました。一部の卑劣なクラップウェア企業は、ブラウザ ヘルパー オブジェクト、サービスのスケジュールされたタスク、さらには画像を介してソフトウェアを自動的にロードする方法を考え始めました。これらの条件のそれぞれを手動でチェックすると、時間がかかるだけでなく、平均的な人。さまざまなユーザーが、MS Config、CCleaner、さらにはタスク マネージャーなど、自動的に起動するプロセスに対処するためのツールをそれぞれ選択しています。しかし、今

  2. Windows 10 でスタートアップ プログラムを管理する方法

    Windows 10 は高速で応答性の高いオペレーティング システムですが、コンピューターの起動時に多数のアプリケーションとサービスを起動するように設定している場合、起動プロセスが確実に停止する可能性があります。ほとんどの場合、それらは無害で便利ですが、同時にこれらの自動起動プログラムはリソースを浪費し、起動時間を長くします。 スタートアップ アプリが悪い理由 すべてのコンピューター マシンには、コンピューターの電源を入れたときに (自動または手動で) 起動するように設定されているプログラムとアプリケーションのリストが含まれています。それらは起動時間を増加させるだけでなく、バ​​ックグラ