Bagaimana cara memulai / menghentikan / memulai kembali layanan launchd dari baris perintah?


149

Bagaimana saya memulai kembali, misalnya httpd atau afpd saya, menjalankan Mac OS X> = 10.5 (Leopard-), tanpa harus menggunakan GUI dan pergi ke System Preferences -> Berbagi dan hapus centang / periksa "Berbagi Web"?

Saya mencari setara kanonik untuk Debian invoke-rc.d apache2 restart.

EDIT: Pertanyaannya adalah tentang peluncuran layanan yang dikendalikan secara umum , tidak secara khusus Apache (-yang hanya merupakan contoh).


1
Dari jawaban sejauh ini, apakah benar untuk menganggap tidak ada perintah launchctl tunggal untuk me - restart layanan?
JS.

@ JS. Menurut halaman buku panduan, kickstartbersama dengan -kopsi tampaknya melakukan trik. Lihat jawaban saya di bawah ...
jochen

Jawaban:


158

Hai launchctl (8) adalah teman Anda. Perlu diingat bahwa beberapa layanan (sshd misalnya) dinonaktifkan dalam file konfigurasi sehingga Anda harus menggunakan -wsakelar saat memuatnya. Berikut ini adalah contoh sshd:

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

Anda dapat menghentikan layanan menggunakan unloadsub- perintah .

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

Untuk daftar layanan, karena Anda mungkin sudah menebak menggunakan sub-perintah 'daftar';)

Selamat bersenang-senang


9
Selain itu, launchctl listtidak mengeluh tetapi tidak menunjukkan segalanya, sudo launchctl listdiperlukan untuk itu.
conny

9
Bukannya itu tidak menunjukkan segalanya, itu menunjukkan daftar yang sama sekali berbeda. Ketika Anda dijalankan launchctlsebagai pengguna normal, ini menunjukkan / mengelola LaunchAgents yang berjalan di sesi pengguna Anda; dijalankan sebagai root, ini menunjukkan / mengelola LaunchDaemons seluruh sistem.
Gordon Davisson

1
Saya dapat melihat "com.openssh.sshd" di daftar itu, jadi saya kira konfigurasi itu "dimuat". Sekarang, bagaimana mungkin misalnya sudo launchctl start com.openssh.sshdtidak melakukan apa - apa , tidak bisa gagal dengan pesan kesalahan, apalagi meluncurkan sesuatu?
conny

2
@conny Mungkin membingungkan dalam kasus umum, namun ketika Anda menulis layanan dan Anda curiga misalnya bahwa sesuatu yang tidak menyenangkan sedang terjadi pada startup, Anda dapat memuatnya sekali dan menggunakan 'stop' / 'start' untuk men-debug masalah. .
nayden

6
Kenapa tidak disebutkan launchctl start <label>atau launchctl stop <label>? Jika sudah dimulai oleh launchctl, tidak perlu memuat ulang file plist (kecuali jika diubah juga?). Menyebalkan tidak ada restartatau reloadperintah. Adakah yang tahu cara perintah tunggal untuk membuat (misalnya) mongod mengambil perubahan file konfigurasi? Saya tidak puas ... stop ... && ... start ....
Brian

7

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


5

Untuk memulai kembali layanan, Anda dapat menggunakan launchctl kickstartperintah, bersama dengan -kopsi. Misalnya, untuk memulai ulang apache, Anda dapat menggunakan

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

Informasi ini dari launchctlhalaman manual:

 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
Ketika saya mencoba ini layanan saya telah digantung, tidak berhenti setelah menunggu sebentar, "membunuh" pada pid tidak membantu, melakukan "membunuh -9" pada pid membunuh proses dan membiarkan kickstart (yang sudah berjalan di lain Konsol sementara saya mencoba untuk mematikan proses) melanjutkan dan memulai layanan lagi. Saya tidak menunggu terlalu lama sebelum mulai membunuh semuanya secara manual, jadi menunggu cukup lama mungkin sudah cukup untuk menyelesaikan masalah.
Samuel Åslund

3

Anda bisa melakukannya

sudo launchctl stop com.openssh.sshd

Jika Anda tidak tahu nama layanan lengkapnya, Anda bisa melakukannya

sudo launchctl list

Jika Anda masih tidak menemukan layanan yang Anda harapkan, coba jalankan tanpa identitas root:

launchctl list

Dan Anda tidak perlu membongkar dan memuat layanan.


1
Saya mencoba ini dan sekarang saya tidak dapat menggunakan sshdari Mac saya. Reboot tidak diperbaiki. Mengganti stopdengan startjuga tidak diperbaiki.
P i

1
Saya mencoba ini dan saya masih bisa ssh ke Mac saya!
Michael

@ dmitriy-apollonin Tidak berfungsi, Anda harus menggunakannya sudo unload /System/Library/LaunchDaemons/ssh.plist.
SebMa

Pertanyaannya adalah tentang memulai kembali layanan, tetapi saya pikir itu launchctl stoptidak me-restart layanan.
jochen

2

Anda sedang mencari 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
Tetapi membaca halaman manual tidak memberi tahu saya apa yang setara dengan keduanya invoke-rc.d my-little-daemon restart... Ini merujuk ke "job_label" tetapi tidak memberi tahu saya bagaimana mendaftar "job_label" yang tersedia.
conny

Saya pikir tanggapan nayden telah membahas hal ini.
eric.s

2

Untuk berjaga-jaga jika Anda mencari launchctl reload, Anda dapat mendefinisikan fungsi shell di Anda ~/.bashrc/.zshrcseperti yang saya lakukan:

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
}

Eksekusi perintah seperti -> lctl reload <your-plist-name>.plist


1
sudo apachectl restart

Bekerja dengan OS lain dan juga merupakan bagian dari Apache.


1
Meskipun topiknya tidak menyebutkan apache pada khususnya, saya seharusnya mengantisipasi interpretasi ini .... Maaf, tapi bukan itu yang saya cari :)
conny

Ok, saya menangkap bagian httpd, yang menggunakan apachectl adalah varian yang lebih mudah :)
Sven

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.