Làm thế nào để bắt đầu / dừng / khởi động lại dịch vụ launchd từ dòng lệnh?


149

Làm cách nào để tôi khởi động lại, ví dụ như httpd hoặc afpd của tôi, chạy bất kỳ Mac OS X> = 10.5 (Leopard-) nào mà không phải sử dụng GUI và đi tới Tùy chọn hệ thống -> Chia sẻ và bỏ chọn / kiểm tra "Chia sẻ web"?

Tôi đang tìm kiếm kinh điển tương đương với Debian invoke-rc.d apache2 restart.

EDIT: Câu hỏi là về các dịch vụ được kiểm soát bởi launchd nói chung , không cụ thể là Apache (- đơn giản chỉ là một ví dụ).


1
Từ các câu trả lời cho đến nay, có đúng không khi cho rằng không có lệnh launchctl duy nhất để khởi động lại một dịch vụ?
JS.

@JS. Theo trang hướng dẫn, kickstartcùng với -ktùy chọn dường như thực hiện các mẹo. Xem câu trả lời của tôi dưới đây ...
jochen

Câu trả lời:


158

Xin chào launchctl (8) là bạn của bạn. Chỉ cần lưu ý rằng một số dịch vụ (ví dụ sshd) bị tắt trong tệp cấu hình, do đó bạn sẽ cần sử dụng công -wtắc khi tải chúng. Đây là một ví dụ sshd:

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

Bạn có thể dừng dịch vụ bằng cách sử dụng unloadtiểu ban.

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

Để liệt kê các dịch vụ, như bạn có thể đã đoán, hãy sử dụng tiểu ban 'danh sách';)

vui vẻ nhé


9
Ngoài ra, launchctl listkhông phàn nàn nhưng không hiển thị mọi thứ, sudo launchctl listlà cần thiết cho điều đó.
Conny

9
Không phải là nó không hiển thị mọi thứ, nó hiển thị một danh sách hoàn toàn khác. Khi bạn chạy launchctlnhư một người dùng bình thường, nó sẽ hiển thị / quản lý LaunchAgents đang chạy trong phiên người dùng của bạn; chạy với quyền root, nó hiển thị / quản lý LaunchDaemons trên toàn hệ thống.
Gordon Davisson

1
Tôi có thể thấy "com.openssh.sshd" trong danh sách đó, vì vậy tôi đoán rằng cấu hình đó đã được "tải". Bây giờ, tại sao ví dụ sudo launchctl start com.openssh.sshdkhông làm gì cả , không phải là evan thất bại với thông báo lỗi, thậm chí còn ít hơn để thực sự khởi chạy bất cứ thứ gì?
Conny

2
@conny Có thể gây nhầm lẫn trong trường hợp chung, tuy nhiên khi bạn đang viết một dịch vụ và bạn nghi ngờ rằng có điều gì đó khó chịu đang xảy ra khi khởi động, bạn có thể tải nó một lần và sử dụng 'stop' / 'start' để gỡ lỗi sự cố .
nayden

6
Tại sao không đề cập đến launchctl start <label>hoặc launchctl stop <label>? Nếu nó đã được khởi động bởi launchctl thì không cần phải tải lại tệp plist (trừ khi nó cũng thay đổi?). Nó là khó chịu không có restarthoặc reloadlệnh. Bất cứ ai cũng biết về một cách thực hiện một lệnh (ví dụ) mongod chọn một thay đổi tập tin cấu hình? Tôi chỉ không hài lòng với ... stop ... && ... start ....
Brian

7

sudo launchctl tải -w / System / L Library / LaunchDaemons / org.apache.httpd.plist


5

Để khởi động lại một dịch vụ, bạn có thể sử dụng launchctl kickstartlệnh, cùng với -ktùy chọn. Ví dụ, để khởi động lại apache, bạn có thể sử dụng

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

Thông tin này là từ launchctltrang hướng dẫn:

 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
Khi tôi thử dịch vụ này, dịch vụ của tôi đã bị treo, nó không dừng lại sau một thời gian ngắn chờ đợi, "giết" trên pid không giúp được gì, làm "kill -9" trên pid đã giết quá trình và để khởi động (nó đã chạy trong một cái khác giao diện điều khiển trong khi tôi đã cố gắng để giết quá trình) tiếp tục và bắt đầu lại dịch vụ. Tôi đã không chờ đợi rất lâu trước khi bắt đầu giết chết mọi thứ bằng tay, vì vậy chờ đợi đủ lâu có thể là đủ để giải quyết vấn đề.
Samuel Åslund

3

Bạn chỉ có thể làm

sudo launchctl stop com.openssh.sshd

Nếu bạn không biết tên dịch vụ đầy đủ, bạn có thể làm

sudo launchctl list

Nếu bạn vẫn không tìm thấy dịch vụ mà bạn mong đợi, hãy thử chạy mà không có danh tính gốc:

launchctl list

Và bạn không cần phải tải và tải dịch vụ.


1
Tôi đã thử điều này và bây giờ tôi không thể sử dụng sshtừ máy Mac của mình. Khởi động lại không khắc phục. Thay thế stopbằng startcũng không sửa.
P i

1
Tôi đã thử điều này và tôi vẫn có thể ssh với máy Mac của tôi!
Michael

@ dmitriy-apollonin Nó không hoạt động, sudo unload /System/Library/LaunchDaemons/ssh.plistthay vào đó bạn phải sử dụng .
SebMa

Câu hỏi là về việc khởi động lại một dịch vụ, nhưng tôi không nghĩ rằng đó là launchctl stopkhởi động lại một dịch vụ.
Jochen

2

Bạn đang tìm kiếm 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
Nhưng đọc trang người đàn ông không cho tôi biết tương đương với cái gì invoke-rc.d my-little-daemon restart... Nó đề cập đến "job_label" nhưng không cho tôi biết cách liệt kê "job_label" có sẵn.
Conny

Tôi nghĩ rằng phản ứng của nayden đã được bảo hiểm này.
eric.s

2

Chỉ trong trường hợp nếu bạn đang tìm kiếm launchctl reload, bạn có thể xác định hàm shell trong ~/.bashrc/.zshrcnhư tôi đã làm:

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
}

Thực thi lệnh trông giống như -> lctl reload <your-plist-name>.plist


1
sudo apachectl restart

Hoạt động với các hệ điều hành khác cũng như nó là một phần của Apache.


1
Mặc dù chủ đề không đề cập đến apache nói riêng, tôi nên đã dự đoán cách giải thích này .... Tôi xin lỗi, nhưng đó không phải là những gì tôi đang tìm kiếm :)
Conny

Ok, tôi đã bắt được phần httpd, trong đó sử dụng apachectl là biến thể dễ dàng hơn :)
Sven

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.