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
次のコマンドを使用して、ユニットファイルのリストを取得できます。
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 [email protected] 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
—サービスであるユニットのリストを表示します
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.
サービスをマスクした後、ユニットファイルを確認すると、サービスがマスクとしてマークされていることがわかります。 :
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
しかし、私はめったに rc.localを使用しません サービスを開始します。多くの場合、rc.localは、スクリプトを開始したり、コマンドを1回実行したりするために使用されます。
たとえば、スクリプト /root/test.shを作成しました それは何かをするので、起動直後に実行したいと思います。 rc.localファイルに次の行を追加します。
sh /root/test.sh
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
次に、ファイルを保存してSSHセッションを再開しました:
ご覧のとおり、ターミナルを起動すると、Webサーバーも再起動されています。ターミナルの起動時に実行できるアクションは何ですか? 稼働時間などの追加のツールである可能性があります サーバーチェック:
または、特定のディレクトリにアクセスして mcを開始する場合 sshコンソールを実行するときは、 .bashrcに以下を追加します :
cd / var /
mc
LinuxでLinuxサービスまたはスクリプトの起動を管理する方法に関するこの記事がお役に立てば幸いです(この記事はCentOSとRHEL向けに書かれていますが、他のディストリビューションにも適しています)。この情報は、Linuxシステム管理の基礎を学ぶ人々にとって役立つと確信しています。
-
ERD Commander Autoruns を使用してスタートアップ プログラムを管理する方法
以前は、スタート メニューのスタートアップ フォルダにエントリを追加するか、レジストリの Run キーに値を追加することで、ソフトウェアが自動的に起動していました。一部の卑劣なクラップウェア企業は、ブラウザ ヘルパー オブジェクト、サービスのスケジュールされたタスク、さらには画像を介してソフトウェアを自動的にロードする方法を考え始めました。これらの条件のそれぞれを手動でチェックすると、時間がかかるだけでなく、平均的な人。さまざまなユーザーが、MS Config、CCleaner、さらにはタスク マネージャーなど、自動的に起動するプロセスに対処するためのツールをそれぞれ選択しています。しかし、今
-
Windows 10 でスタートアップ プログラムを管理する方法
Windows 10 は高速で応答性の高いオペレーティング システムですが、コンピューターの起動時に多数のアプリケーションとサービスを起動するように設定している場合、起動プロセスが確実に停止する可能性があります。ほとんどの場合、それらは無害で便利ですが、同時にこれらの自動起動プログラムはリソースを浪費し、起動時間を長くします。 スタートアップ アプリが悪い理由 すべてのコンピューター マシンには、コンピューターの電源を入れたときに (自動または手動で) 起動するように設定されているプログラムとアプリケーションのリストが含まれています。それらは起動時間を増加させるだけでなく、バックグラ