コマンドラインからlaunchdサービスを開始/停止/再起動する方法は?


149

GUIを使用して[システム環境設定]-> [共有]および[ Web共有]をオフ/チェックすることなく、Mac OS X> = 10.5(Leopard-)を実行しているhttpdまたはafpdなどを再起動するにはどうすればよいですか?

Debianの正規の同等物を探していinvoke-rc.d apache2 restartます。

編集:質問は、特にApacheではなく、起動された制御されたサービス全般に関するものです(これは単なる例です)。


1
これまでの回答から、サービスを再起動する単一のlaunchctlコマンドがないと仮定するのは正しいですか?
JS。

@JS。マニュアルページによるkickstartと、-kオプションと一緒にトリックを行うようです。以下の私の答えを参照してください...
jochen

回答:


158

こんにちはlaunchctl(8)はあなたの友達です。いくつかのサービス(たとえば、sshd)が構成ファイルで無効になっているため、-wそれらをロードするときにスイッチを使用する必要があることに注意してください。sshdの例を次に示します。

$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 

unloadサブコマンドを使用してサービスを停止できます。

$ sudo launchctl unload  /System/Library/LaunchDaemons/ssh.plist 

すでに推測しているように、サービスをリストするには、「list」サブコマンドを使用します;)

楽しんでください、n


9
さらに、launchctl list文句を言わないが、すべてを表示しませんsudo launchctl list、そのために必要です。
conny

9
すべてを表示するわけではなく、完全に異なるリストを表示します。あなたが実行すると、launchctl通常のユーザーとして、それが示し/ユーザーセッションで実行されているのLaunchAgentsを管理します。rootとして実行すると、システム全体のLaunchDaemonを表示/管理します。
ゴードンデイヴィソン

1
そのリストに「com.openssh.sshd」が表示されているので、構成が「ロード」されていると思います。さて、どうして例えばsudo launchctl start com.openssh.sshd行っていないものを、エヴァンは、エラーメッセージで失敗しない、さらに少ないので、実際には何を起動しますか?
コニー

2
@conny一般的なケースでは混乱するかもしれませんが、サービスを書いているときに、たとえば起動時に何か厄介なことが起こっていると思われる場合は、一度それをロードし、「stop」/「start」を使用して問題をデバッグできます。
ネイデン

6
launchctl start <label>またはの言及がないのはなぜlaunchctl stop <label>ですか?launchctlによって既に開始されている場合、plistファイルを再ロードする必要はありません(変更されていない限り)。何もありません迷惑であるrestartreloadのコマンドが。(たとえば)mongodが構成ファイルの変更を取得する単一コマンドの方法を知っている人はいますか?私はただ満足していません... stop ... && ... start ...
ブライアン

7

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist


5

サービスを再起動するにlaunchctl kickstartは、-kオプションとともにコマンドを使用できます。たとえば、Apacheを再起動するには、次を使用できます。

sudo launchctl kickstart -k system/org.apache.httpd

この情報は、launchctlマニュアルページからのものです。

 kickstart [-kp] service-target
          Instructs launchd to run the specified service immediately, regardless of its
          configured launch conditions.

          -k       If the service is already running, kill the running instance before
                   restarting the service.
          [...]

1
私がこれを試したとき、私のサービスはハングしましたが、しばらく待っても停止しませんでした、pidの「kill」は役に立たず、pidで「kill -9」を実行するとプロセスが強制終了され、キックスタート(別で実行されていました)プロセスを強制終了しようとしたときにコンソール)を続行し、サービスを再度開始します。私は物事を手動で殺し始める前に非常に長い間待たなかったので、問題を解決するのに十分な長さの待ち時間で十分だったかもしれません。
サミュエルオスランド

3

簡単にできます

sudo launchctl stop com.openssh.sshd

完全なサービス名がわからない場合は、次のことができます

sudo launchctl list

それでも期待したサービスが見つからない場合は、ルートIDなしで実行してみてください。

launchctl list

また、サービスをアンロードおよびロードする必要はありません。


1
これを試してみたところssh、Macから使用できなくなりました。再起動しても修正されません。で置換stopしてstartも修正されません。
P私は

1
私はこれを試してみましたが、私はまだMacにsshできます!
マイケル

@ dmitriy-apollonin動作しませんsudo unload /System/Library/LaunchDaemons/ssh.plist。代わりに使用する必要があります。
SebMa

問題はサービスを再起動することですが、私はそれlaunchctl stopがサービスを再起動するとは思いません。
ヨッヘン

2

あなたが探していlaunchctlます。

SYNOPSIS
 launchctl [subcommand [arguments ...]]

DESCRIPTION
 launchctl interfaces with launchd to load, unload daemons/agents and gen-
 erally control launchd.  launchctl supports taking subcommands on the
 command line, interactively or even redirected from standard input.
 These commands can be stored in $HOME/.launchd.conf or /etc/launchd.conf
 to be read at the time launchd starts.

2
しかし、マニュアルページを読んでも、どちらに相当するかinvoke-rc.d my-little-daemon restartはわかりません...「job_label」を参照しますが、利用可能な「job_label」をリストする方法を教えません。
conny

naydenの応答はこれをカバーしていると思います。
エリック

2

をお探しの場合にlaunchctl reload備えて~/.bashrc/.zshrc、私がやったようにシェル関数を定義できます:

function lctl {
    COMMAND=$1
    PLIST_FILE=$2
    if [ "$COMMAND" = "reload" ] && [ -n "$PLIST_FILE" ]
      then
        echo "reloading ${PLIST_FILE}.."
        launchctl unload ${PLIST_FILE}
        launchctl load ${PLIST_FILE}
      else
        echo "either command not specified or plist file is not defined"
    fi
}

コマンドの実行は次のようになります-> lctl reload <your-plist-name>.plist


1
sudo apachectl restart

Apacheの一部であるだけでなく、他のOSでも動作します。


1
トピックは、特にApacheを言及していないにもかかわらず、私はこの解釈を予想している必要があります....私は申し訳ありませんが、それは、私は:)を探していたものではありませんでした
コニー

OK、httpdの部分をキャッチしました。apachectlを使用する方が簡単です:)
Sven

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