Ubuntuでサービスを有効または無効にする方法について読んだところ、サービスを管理するさまざまな可能性があるようです。
最初に見つけた方法は、update-rc.d
フォルダーとそのコンテンツを対象とする新しいサービスをスタートアップに追加する/etc/init.d
です。
私が見つけたもう1つの方法は、.conf
フォルダー内の/etc/init
ファイルを編集することです。
サービスを有効化/無効化/追加するための推奨される方法とその理由は何ですか?
Ubuntuにサービスを追加し、有効化および無効化する方法について、手順を追って短い防弾の例を挙げてください。
GUI(startup
アプリケーションなど)または端末を使用して有効/無効にできるサービスがあります。
ターミナルには、いくつかのオプションがあります。最初に、ターミナルを開きます(たとえば、ダッシュで「terminal」と入力して開きます)。次に:
サービスを一時停止および開始するには一時的に(今後のブートでサービスを有効/無効にしない)、service SERVICE_NAME
と入力できます。例えば:
Sudo service Apache2 stop
(Will STOP再起動するまで、または再起動するまでApacheサービス)。
Sudo service Apache2 start
(Will START以前に停止されたと仮定したApacheサービス。).
service Apache2 status
(サービスが有効/実行中/無効/実行中でない場合、サービスのステータスが表示されます。).
Sudo service Apache2 restart
(Will RESTARTサービス。これは、設定ファイルを変更したときに最もよく使用されます。この場合、PHP設定またはApache設定。再起動により、2つのコマンドラインで停止/起動する必要がなくなります。
service Apache2
(この場合、サービスに対して実行するACTIONについて言及しなかったため、その特定のサービスで使用可能なすべてのオプションが表示されます。)この側面は、たとえばMySQLの場合、サービスによって異なりますパラメータが欠落していることだけに言及します。ネットワークサービスのような他のサービスについては、利用可能なすべてのオプションの小さなリストに言及します。
Ubuntu 15.04以降、Upstartは非推奨となり、Systemdが採用されます。 Systemdを使用してサービスを管理すると、次のことができます。
systemctl start SERVICE
-これを使用してサービスを開始します。再起動後も持続しません
systemctl stop SERVICE
-これを使用してサービスを停止します。再起動後も持続しません
systemctl restart SERVICE
-それを使用してサービスを再起動します
systemctl reload SERVICE
-サービスがサポートしている場合、サービスを使用しているプロセスを中断することなく、関連する構成ファイルを再ロードします。
systemctl status SERVICE
-サービスのステータスを表示します。サービスが現在実行中かどうかを示します。
systemctl enable SERVICE
-次の再起動または次の開始イベントでサービスをオンにします。再起動後も持続します。
systemctl disable SERVICE
-次の再起動時または次の停止イベントでサービスをオフにします。再起動後も持続します。
systemctl is-enabled SERVICE
-サービスが現在、次の再起動時に開始するように設定されているかどうかを確認します。
systemctl is-active SERVICE
-サービスが現在アクティブかどうかを確認します。
systemctl show SERVICE
-サービスに関するすべての情報を表示します。
Sudo systemctl mask SERVICE
-/dev/null
にリンクすることにより、サービスを完全に無効にします。サービスを手動で開始したり、サービスを有効にしたりすることはできません。
Sudo systemctl unmask SERVICE
-/dev/null
へのリンクを削除し、サービスを有効化または手動で開始する機能を復元します。
公式のUpstartの方法を使用する場合(現時点では、すべてのサービスがUpstartに変換されているわけではないことに注意してください)、次のコマンドを使用できます。
status SERVICE
-これは、変換されたサービスが実行されているかどうかを示します。これはstart
、stop
、status
&restart
を優先して廃止されることに注意してください。また、サービスがまだupstartに変換されていないかどうかもわかります。
変換されたサービスは通常、現在のステータス(開始中、実行中、停止中...)およびプロセスIDを出力します。変換されていないサービスは、不明なジョブに関するエラーを返します。
一部のショートカットは、上記のservice
コマンドでのみ機能しますが、upstartサービスに100%変換されない限り、以下のコマンドでは機能しません。
START-Sudo start mysql
STOP-Sudo stop mysql
RESTART-Sudo restart mysql
STATUS-Sudo status smbd
サービスを永続的に開始または停止するかどうかを切り替えるには、次のことを行う必要があります。
echo manual | Sudo tee /etc/init/SERVICE.override
スタンザmanual
は、Upstartが次回ブート時にサービスを自動的にロードするのを停止します。 .override
で終わるサービスは、元のサービスファイルよりも優先されます。その後は、手動でのみサービスを開始できます。これが必要ない場合は、.override
を削除してください。例えば:
echo manual | Sudo tee /etc/init/mysql.override
MySQLサービスをmanual
モードにします。これが必要ない場合は、後で行うことができます
Sudo rm /etc/init/mysql.override
サービスを再起動して、自動的に再起動します。もちろん、サービスを有効にするための最も一般的な方法は、インストールすることです。 Apache、Nginx、MySQLなどをインストールすると、インストールが完了すると自動的に起動し、コンピューターが起動するたびに起動します。前述のように無効にすると、サービスmanual
が使用されます。
現在、Ubuntuでサービスとしてソフトウェアを開始するには、実際には3つの異なる方法があります。SysV、Upstartおよびsystemd。ここでサービスは、ユーザーが直接起動して実行するサービスとは対照的に、バックグラウンドでシステムによって実行されるプログラムとして定義されます。
Linuxでサービスを開始する従来の方法は、スクリプトを/etc/init.d
に配置し、update-rc.d
コマンド(またはRedHatベースのディストリビューションchkconfig
)を使用して有効または無効にすることでした。
このコマンドは、やや複雑なロジックを使用して、/etc/rc#.d
にシンボリックリンクを作成します。これは、サービスの開始順序を制御します。 ls /etc/rc2.d
を実行すると、K##xxxx
などのファイル名でサービスが強制終了され、ファイル名S##xxxx
で開始される順序を確認できます。 ##
のS##xxxx
は、サービスxxxx
の「開始順序」を意味します。逆に、##
のK##xxxx
は、サービスxxxx
の強制終了順序を意味します。
SysVの1つの大きな問題は、システムの起動時に すべてを順番に行う必要があり、次々にシステムの起動時間が非常に遅くなる 。これを並列化する試みが行われましたが、それらは無計画であり、十分に活用するのが困難でした。これが、Upstartが作成された主な理由でした。
Upstartは、/etc/init
のジョブ定義ファイルを使用して、サービスを開始するイベントを定義します。そのため、システムの起動中に、upstartはさまざまなイベントを処理し、複数のサービスを並行して開始できます。これにより、たとえば、別のCPUバインドサービスの実行中、またはネットワークが動的IPアドレスの割り当てを待機している間にディスクバインドサービスを開始することにより、システムのリソースを完全に活用できます。
ls /etc/init/*.conf
を実行すると、すべてのupstartジョブファイルを表示できます。
ここで停止して、サービスとは何か、またはサービスが何であるかわからない場合は、無効にしないでください。
すべてのサービスがupstartに変換されているわけではありません。過去数か月にわたってCanonicalのサーバーチームで働いていたとき、私は多くの変換されたジョブファイルに取り組んできました。最も良い部分は、すべてのスクリプト「魔法」を取り除き、サービスを開始する方法を正確に定義するためのコマンドはあちこちにあり、それ以上はありません。ただし、現時点では、squidやsambaなどの少数の従来のネットワークサービスのみが変換されています。
サービスがupstartベースかどうかを判断するには、statusコマンドを実行できます。
status servicename
upstartジョブの場合、次のように表示されます。
$ status statd
statd start/running, process 942
しかし、そうでない場合は、次のようなものが表示されます。
$ status Apache2
status: Unknown job: Apache2
この場合、Apache2
はupstartに変換されていません。したがって、Apache2
を無効にするには、実行するだけです
Sudo update-rc.d Apache2 disable
Sudo service Apache2 stop
Upstartジョブ定義にはupdate-rc.d
コマンドがありません。ジョブを無効にするには、ジョブファイルを直接編集して無効にする必要があります。これを行うには2つの方法があります。
それでも手動で開始できるようにするには、start on
条件をコメント化する必要があります。 sambaをインストールしたいが、自動的に起動したくないとします。これがジョブファイルです(natty内):
description "SMB/CIFS File Server"
author "Steve Langasek <[email protected]>"
start on local-filesystems
stop on runlevel [!2345]
respawn
pre-start script
RUN_MODE="daemons"
[ -r /etc/default/samba ] && . /etc/default/samba
[ "$RUN_MODE" = inetd ] && { stop; exit 0; }
install -o root -g root -m 755 -d /var/run/samba
end script
exec smbd -F
sambaを無効にするには、「#
」の前にstart on local-filesystems
を置くだけです。起動時にバックアップは開始されませんが、今回はそれを停止する必要があることに注意してください
Sudo service smbd stop
ただし、sambaを起動したくない場合は、実際にパッケージを削除することをお勧めします。ただし、インストールしたいが起動できない場合は、次のこともできます。
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
11.04のupstartのバージョンからは、start on
およびstop on
スタンザを無効にする新しいキーワードがあります:manual
。したがって、11.04の時点でサービスを無効にする別の方法は次のとおりです。
echo 'manual' | Sudo tee /etc/init/mysql.override
# command from root Shell
echo manual >> /etc/init/mysql.override
override
キーワードを入力するだけで、ジョブ定義をまったく編集せずに、manual
ファイルを作成してサービスを無効にできます。
sysv-rc-confを使用してみてください
Sudo apt-get install sysv-rc-conf
サービスの管理を開始するには、実行します
Sudo sysv-rc-conf
このような対話型ウィンドウが表示されます
次のページにCtrl+n
を、前のページにCtrl+p
を使用して、ページをさらにナビゲートできます。目的のランレベルでSPACE
を選択すると、サービスを有効または無効にできます。
別の代替方法は、Jobs-Adminでインストールする
Sudo apt-get install jobs-admin
このようなGUIも提供します
より多くのジョブを表示するには、メニューから保護されたジョブを表示にチェックマークを付ける必要があります。
3番目のオプションはchkconfigになります。
Sudo apt-get install chkconfig
CLI chkconfig
を介して使用でき、オン/オフジョブのリストが表示されます。また、chkconfig –list
を使用してシステムサービスを表示できます
を使用してサービスをオンにできます
chkconfig <service> on
を使用してサービスをオフにできます
chkconfig <service> off
また、適切な見出しを持つ適切なinitスクリプトを使用して、独自のサービスを追加することもできます。
chkconfig --add <service>
また、別のオプションを参照することもできます ここではupdate-rc.d 、簡単に説明すると here 。
Ubuntu Server 12.04では、update-rc.d
chkconfigの代わりに使用されます
SshでUbuntuを実行している私たちにとって、最も良いオプションはrcconf
-テキストベースのプログラムです。
Sudo apt-get install rcconf
Sudo rcconf
タブと矢印キーで移動し、スペースバーを押して有効/無効にします。変更は再起動後も持続します。
このブログ投稿 から借用したスクリーンショット。sysv-rc-conf
も表示されます。これは、ランレベルを設定できる同様のツールです。 (ランレベルを変更することを望むのにランレベルを気にする人のために:)
残念ながら、rcconfはupstart(/etc/init/*
にリストされているサービス)では機能せず、従来のメカニズム(ls -l /etc/init.d/*
-シンボリックリンクではないもの)でのみ機能します。
幸いなことに、サーバーにSSHで接続するときに関連するサービス(Apache、Tomcat、mdadm、boinc-client ...)の多くは、まだupstartに移行されていません。
BUMのようなものの、Upstartと互換性のあるこのGUIツールがあることがわかりました。
ジョブ管理者
Sudo apt-get install jobs-admin
(上記のように)既存のupstart構成ファイルを編集することは、あまり良い考えではありません。更新されたパッケージは更新された構成を提供する可能性があり、変更を何度も繰り返す必要がありました。
man 5 init
を見ると、より適切な解決策が見つかります。オーバーライド構成を使用することです。短い例:「foobar」というサービスがあるとします。したがって、/etc/init/foobar.conf
というファイルがあり、そのスタートアップ構成があります。今、あなたはそのファイルを削除したり、変更したりしたくない-しかし、あなたはこのサービスを実行したくないのか?そのため、横にオーバーライドファイルを配置します:/etc/init/foobar.override
、(オプションで説明付きのヘッダーと)代わりにstart on
/stop on
行を配置します1つのWordで:manual
。この方法では、基本的にfoobar.conf
を使用するようにupstartに指示しますが、手動で実施される場合(この例ではservice foobar start
を介して)のみそのサービスを開始するようにスタートアップ定義をオーバーライドします。
Stacerを使用します。サービスとプロセスも表示されます。完全なGUIシステムツールボックス。 https://github.com/oguzhaninan/Stacer