サービスを有効または無効にする方法


821

Ubuntuでサービスを有効または無効にする方法について読んだところ、サービスを管理するさまざまな可能性があるようです。

私が見つけた最初の方法はupdate-rc.d、スタートアップに新しいサービスを追加すること/etc/init.dです。これは、フォルダーとそのコンテンツを対象としています。

私が見つけたもう一つ.confは、/etc/initフォルダ内のファイルを編集することです。

サービスを有効化/無効化/追加するための推奨される方法とその理由は何ですか?

Ubuntuにサービスを追加し、有効化および無効化する方法について、ステップバイステップの簡単な例を示してください。


1
:参照してくださいネットワーキングのためのaskubuntu.com/questions/230698/...
ホルヘ・カストロ

これは、Fedora 12にこだわってここに上陸した人たちに役立つでしょう。linkrot chkconfigが探しているものである場合。
出血の指14

3
ここでは、Ubuntu 14.04の答えがまだ見つからないことに注意してください。
Reinierポスト

2
@MarcelloNuccio:Ubuntu 15.04以降、UpstartはSystemdを支持して廃止されました。
ダンダスカレスク16

自動起動プログラムはで構成されたautostartマニフェストやで*.service同様のように、複数の場所にあるファイルinit.dまたはcrontab。参照:unix.stackexchange.com/a/525845/43233
Noam Manos

回答:


832

GUI(startupアプリケーションなど)またはターミナルを使用して有効化/無効化できるサービスがあります。

ターミナルには、いくつかのオプションがあります。最初に、ターミナルを開きます(たとえば、ダッシュで「terminal」と入力して開きます)。次に:

一時的な有効化/無効化サービス

サービスを一時的に停止および開始するには(今後のブートでサービスを有効/無効にしないでください)、と入力できますservice SERVICE_NAME。例えば:

  • sudo service apache2 stop(Apacheサービスは、再起動するか、再起動するまで停止します)。

  • sudo service apache2 start(ウィルSTARTそれは前に停止したと仮定すると、Apacheのサービスを。)。

  • service apache2 status (サービスが有効/実行中または無効/実行中でない場合、サービスのステータスが表示されます。)

  • sudo service apache2 restart(ウィル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(15.04から非推奨)

公式のUpstartの方法を使用したい場合(現時点では、すべてのサービスがUpstartに変換されていないことに注意してください)、次のコマンドを使用できます。

status SERVICE-これにより、変換されたサービスが実行されているかどうかがわかります。これはの賛成で廃止されていることに注意してくださいstartstopstatusrestart。また、サービスがまだupstartに変換されていないかどうかもわかります。

変換されたサービスは通常、現在のステータス(開始中、実行中、停止中...)およびプロセスIDを出力します。非変換されたサービスは未知の仕事に関してエラーを与えるでしょう。

一部のショートカットは、service上記のコマンドでのみ機能しますが、upstartサービスに100%変換されない限り、以下のコマンドでは機能しません。

  • 開始 -sudo start mysql

  • 停止 -sudo stop mysql

  • 再起動 -sudo restart mysql

  • ステータス -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


.serviceすべてのコマンドに追加する必要がありますか?systemctl mongod statusうまくいきました。
ダンダスカレスク16

@DanDascalescuいいえ、そうではありませんが、それを明確にさせてください。
ルイスアルバラード

4
.overrideファイルを/etc/init.d/に配置する必要がありますか(つまり、サービスが配置される場所)?
オビワン-PallavJha

Upstartが15.04で非推奨になったのはなぜですか?ubuntu 16.04以降で起動/再起動時にスクリプトを実行する正しい方法は何ですか?
カマラカンナンJ

1
この包括的な回答をありがとう。systemdコマンドのセットは、Ubuntuの18.04で御馳走に動作します。
ドクトルJ

355

現在、Ubuntu、SysVUpstart、およびsystemdでサービスとしてソフトウェアを開始するには、実際には3つの異なる方法があります。ここでは、サービスは、ユーザーが直接開始して実行するものとは対照的に、バックグラウンドでシステムによって実行されるプログラムとして定義されます。

SysV

Linuxでサービスを開始する従来の方法は、スクリプトをに配置し/etc/init.dupdate-rc.dコマンド(またはRedHatベースのディストリビューションchkconfig)を使用して有効または無効にすることでした。

このコマンドは、やや複雑なロジックを使用して/etc/rc#.d、サービスの開始順序を制御するシンボリックリンクを作成します。実行ls /etc/rc2.dすると、次のようなファイル名でサービスが強制終了され、ファイル名K##xxxxで開始される順序を確認できますS##xxxx##中には、S##xxxxサービスの「起動順序」を意味しますxxxx。逆に、##in K##xxxxはserviceのkill順序を意味しますxxxx

SysVの大きな問題の1つは、システムの起動時にすべてをシリアルで実行する必要があり、システムの起動時間が非常に遅くなることです。これを並列化する試みが行われましたが、それらは無計画であり、十分に活用するのが困難でした。これがUpstartが作成された主な理由です。

新興企業

Upstartは、ジョブ定義ファイル/etc/initを使用して、サービスを開始するイベントを定義します。そのため、システムの起動中に、upstartはさまざまなイベントを処理し、複数のサービスを並行して開始できます。これにより、たとえば、別のCPUバインドサービスの実行中、またはネットワークが動的IPアドレスの割り当てを待機している間にディスクバインドサービスを開始することにより、システムのリソースを完全に活用できます。

以下を実行することにより、すべてのupstartジョブファイルを表示できます。 ls /etc/init/*.conf

ここで停止して、サービスとは何か、またはサービスが何であるかわからない場合は、無効にしないでください。

すべてのサービスがupstartに変換されているわけではありません。過去数か月にわたってCanonicalのサーバーチームで働いていたとき、私は多くの変換されたジョブファイルに取り組んできました。最も良い部分は、すべてのスクリプト「魔法」を取り除き、サービスを開始する方法を正確に定義するためのコマンドはあちこちにあり、それ以上はありません。ただし、現時点では、squidsambaなどの少数の従来のネットワークサービスのみが変換されています。

サービスは新興企業ベースですか?

サービスがupstartベースかどうかを判断するには、statusコマンドを実行できます。

status servicename

新興企業の場合、次のように表示されます。

$ status statd
statd start/running, process 942

しかし、そうでない場合は、次のようなものが表示されます。

$ status apache2
status: Unknown job: apache2

この場合、upstartにapache2変換されていません。したがって、無効にするには、単に実行しますapache2

sudo update-rc.d apache2 disable
sudo service apache2 stop

Upstartでサービス(ジョブ)を無効にする

Upstartジョブ定義にはupdate-rc.dコマンドがありません。ジョブを無効にするには、ジョブファイルを直接編集して無効にする必要があります。これを行うには2つの方法があります。

それでも手動で開始できるようにする場合は、start on条件をコメント化する必要があります。sambaをインストールしたいが、自動的に起動したくないとしましょう。これがジョブファイルです(natty内):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

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」の前にa を置くだけです。起動時にバックアップは開始されませんが、今回はそれを停止する必要があることに注意してください

sudo service smbd stop

ただし、sambaを起動したくない場合は、実際にパッケージを削除することをお勧めします。ただし、インストールしたいが起動できない場合は、次のこともできます。

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

start / stopスタンザを使用してサービスを無効にします(11.04以降)

11.04に含まれるupstartのバージョンから開始して、start onstop onスタンザを無効にする新しいキーワードがあります:manual。したがって、11.04の時点でサービスを無効にする別の方法は次のとおりです。

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

キーワードを入力overrideするだけで、ジョブ定義をまったく編集せずにサービスを無効にするファイルを作成できますmanual


20
11.04もオーバーライドしているようです。したがってecho manual >> /etc/init/<service>.override、元の.conf filkeをそのまま残すため、推奨されます。とにかく、そのような基本的な有効化/無効化の開発には3年かかったのは残念であり、そのためのGUIはありません。
メストレリオン

3
更新-rc.dのは、本当に重要なものである
Timofey

2
は、元の質問ポスターによって決定的な回答としてタグ付けされた回答よりも、元のトピックを処理しているようです。ありがとう!:)
ヘニング14

1
私の場合、ファイルは/etc/init/ssh.conf存在しますがstatus sshstatus sshd両方とも「不明なジョブ」と表示されます。この答えはそのような可能性に対処していないようですか?
ブライアンZ

1
status ssh私も「不明な仕事」を与えてくれますがservice ssh status、私のために働いています
-ptim

129

sysv-rc-conf

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も提供します

ジョブ管理者プレビュー

より多くのジョブを表示するには、メニューから「保護されたジョブ表示」にチェックマークを付ける必要があります。

chkconfig

3番目のオプションはchkconfigです

sudo apt-get install chkconfig

CLI経由で使用できchkconfig、オン/オフジョブのリストが表示されます。また、次を使用してシステムサービスを表示できます。chkconfig –list

を使用してサービスをオンにできます

chkconfig <service> on

を使用してサービスをオフにできます

chkconfig <service> off

また、適切な見出しを持つ適切なinitスクリプトを使用して、独自のサービスを追加することもできます。

chkconfig --add <service>

update-rc.d

また、別のオプションは、ここで簡単に説明されているupdate-rc.dで参照できます

Ubuntu Server 12.04 では、chkconfigの代わりに使用されることに注意してupdate-rc.d ください。


1
Ubuntuのサーバー上:Package chkconfig is not available, but is referred to by another package.
pwned

@pwnedサーバーエディションに関する更新された情報を自由に編集および投稿できます。ありがとう。
atenz

あなたが提案したように、私はピアレビューの準備ができました。
13

jobs-adminジョブの変更を許可せず(Ubuntu 14.04)、代わりにクラッシュレポートを生成します;-)
サディ

5
sysv-rc-confはupstartまたはsystemdでの使用には適していません。これは、10年近くUbuntu Linuxのデフォルトではなかった古いSystem 5 rcシステム専用です。Debian Bug#791689はこれを認めており、なぜsystemdとの競合としてマークされていないのかを疑問視しています。
JdeBP

48

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に移行されていません。


6
これはまだupstartで機能しますか?
オクトーシス

3
残念だけど違う。しかし、それは私が変更したいすべてのケースで機能しました-スタートアップジョブはほとんど私が無効にしたくないものです-ハードウェアクロック、ログデーモン、ネットワークなど(少なくともUbuntuサーバーでは)。しかし、それは知っておくべきことです(私はそうではありませんでした)、私は投稿を更新しました。
JG-ファウスト

残念ながら、mysqlはupstartに変換されました。そして、それは私が何かのプロジェクトをしているときにだけ使うサービスです。
メストレリオン

Ubuntu 12.04のrcconfには、プログラムの起動を妨げるバグがあります。この問題を解決するには、ダイアログパッケージをインストールする必要があります。
-devius

1
この回答が書かれてからupdate-rc.d変更され、廃止された機能の一部が削除されました。Debianバグ#727735は、rcconfが一致するように変更されなかったことを指摘しています。いいえ、rcconfはsystemdでも機能しないため、過去10年間、Ubuntu Linuxのデフォルトのinitシステムのいずれにも適用できません。
JdeBP

18

BUMのようなものの、Upstartと互換性のあるこのGUIツールがあることがわかりました。

  • ジョブ管理者

    sudo apt-get install jobs-admin
    

しかし、それはあまりにも単純であり、「保護されたジョブ」を変更することはできません(そのjobbsとは何ですか?AppleにはJobs、オペレーティングシステムにはデーモンがあります!)
kakaz

「保護されていないジョブ」(Ubuntu 14.04)を変更することもできず、代わりにクラッシュレポートを作成します;
サディ

12

(上記のように)既存のupstart構成ファイルを編集することは、あまり良い考えではありません。更新されたパッケージは更新された構成を提供する可能性があり、変更を何度も繰り返す必要がありました。

man 5 init1つを見てみると、より適切な解決策が見つかります。オーバーライド構成を使用します。短い例:「foobar」というサービスがあると/etc/init/foobar.confします。そのため、スタートアップ構成で呼び出されるファイルがあります。今、あなたはそのファイルを削除したり、変更したりしたくない-しかし、あなたはこのサービスを実行したくないのか?そのため、オーバーライドファイルをその横に配置します/etc/init/foobar.override、(オプションで説明とヘッダーを含む)代わりにstart on/の代わりに1 stop on行の行を配置します:manual。この方法ではfoobar.conf、基本的にを使用するようにupstartに指示しますが、スタートアップ定義をオーバーライドして、手動で強制された場合にのみサービスを開始します(service foobar startこの例では)。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.