Başlatma hizmetlerini komut satırından başlatmak / durdurmak / yeniden başlatmak nasıl?


149

GUI'yi kullanmak zorunda kalmadan ve Sistem Tercihleri ​​-> Paylaşma ve "Web Paylaşımı" nın işaretini kaldırma / işaretini kaldırmadan herhangi bir Mac OS X> = 10.5 (Leopard-) çalıştırarak httpd veya afpd'yi nasıl yeniden başlatacağım ?

Debian'ın kurallı eşdeğerini arıyorum invoke-rc.d apache2 restart.

EDIT: Soru, özellikle Apache değil , genel olarak fırlatmalı kontrollu hizmetler hakkında .


1
Cevaplardan, bir servisi yeniden başlatmak için tek bir launchctl komutu olmadığını varsaymak doğru mudur ?
JS.

@JS. Manuel sayfaya göre kickstart, -kseçenek ile birlikte hile yapmak gibi görünüyor. Aşağıdaki cevabımı görün ...
jochen,

Yanıtlar:


158

Merhaba launchctl (8) arkadaşın. Yapılandırma dosyasında bazı hizmetlerin (örneğin, sshd) devre dışı bırakıldığını, bu nedenle -wyüklerken anahtarı kullanmanız gerekeceğini unutmayın . İşte bir sshd örneği:

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

unloadAlt komutu kullanarak servisi durdurabilirsiniz .

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

Hizmetleri listelemek için, tahmin ettiğiniz gibi 'list' alt komutunu kullanın;)

eğlen


9
Ayrıca launchctl listşikayet etmese de her şeyi göstermiyor, sudo launchctl listbunun için gerekli.
conny

9
Her şeyi göstermiyor, tamamen farklı bir liste gösteriyor. Eğer çalıştırdığınızda launchctlnormal bir kullanıcı olarak, bu / kullanıcı oturumunda çalışan LaunchAgents yönetir göstermektedir; root olarak çalıştırıldığında, sistem genelinde LaunchDaemons'u gösterir / yönetir.
Gordon Davisson

1
Bu listede "com.openssh.sshd" yi görebiliyorum, bu yüzden "config" yüklendiğini tahmin ediyorum. Şimdi, nasıl olur da örneğin hiçbir şeysudo launchctl start com.openssh.sshd yapmaz , bir hata mesajı ile başarısız olunmaz, hatta daha az şey aslında bir şeyi başlatır mı?
conny

2
@conny Genel durumda kafa karıştırıcı olabilir, ancak bir hizmet yazarken ve örneğin kötü bir şeyin başlangıçta yapıldığından şüphelendiğinizde, bir kez yükleyebilir ve sorunu gidermek için 'stop' / 'start' komutunu kullanabilirsiniz. .
nayden

6
Neden hiç söz launchctl start <label>ya launchctl stop <label>? Daha önce launchctl tarafından başlatılmışsa, plist dosyasını yeniden yüklemeye gerek yoktur (de değişmediyse?). Can sıkıcı bir şey yok restartya da reloadkomut. Mongod'un tek bir komut yolunu yapmasını bilen biri (örneğin) bir config dosyası değişikliği mi seçer? Ben sadece memnun değilim ... stop ... && ... start ....
Brian

7

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


5

Bir servisi yeniden başlatmak launchctl kickstartiçin -kseçeneği ile birlikte komutu kullanabilirsiniz . Örneğin, apache'yi yeniden başlatmak için

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

Bu bilgiler launchctlkılavuz sayfasındandır:

 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
Servisimi kapattığımı denediğimde, kısa bir beklemeden sonra durmadı, pideye "öldür" yardım etmedi, pid üzerinde "öldür -9" yaparak işlemi öldürdü ve başladı (ben süreci öldürmeye çalıştığımda konsol) devam edip hizmeti yeniden başlat. Bir şeyi el ile öldürmeye başlamadan önce çok uzun süre beklemedim, bu yüzden sorunu çözmek için yeterince uzun süre beklemek yeterli olabilirdi.
Samuel Åslund

3

Basitçe yapabilirsin

sudo launchctl stop com.openssh.sshd

Servisin tam adını bilmiyorsanız,

sudo launchctl list

Beklediğiniz hizmeti hala bulamıyorsanız, kök kimliği olmadan çalıştırmayı deneyin:

launchctl list

Ve hizmeti boşaltmanız ve yüklemeniz gerekmez.


1
Bunu denedim ve şimdi Mac'imden kullanamıyorum ssh. Yeniden başlatma sorunu çözmez. Değiştirme stopile startde düzeltmez.
P

1
Bunu denedim ve hala Mac'ime yazabiliyorum!
Michael,

@ dmitriy-apollonin Çalışmıyor, sudo unload /System/Library/LaunchDaemons/ssh.plistbunun yerine kullanmalısınız .
SebMa

Soru bir hizmeti yeniden başlatmakla ilgili, ancak bunun bir hizmeti yeniden başlattığını sanmıyorum launchctl stop.
jochen,

2

Sen arıyorsun 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
Ancak man-sayfasını okumak bana, ikisinin de eşdeğeri olduğunu söylemez invoke-rc.d my-little-daemon restart... "job_label" anlamına gelir, ancak "job_label" lerin nasıl kullanılabilir olduğunu nasıl söyleyeceğimi söylemez.
conny

Bence Nayden'in cevabı bunu halletmişti.
eric.s

2

Sadece arıyorsanız launchctl reload, kabuk işlevini ~/.bashrc/.zshrcbenim yaptığım gibi tanımlayabilirsiniz :

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
}

Komut yürütme benziyor -> lctl reload <your-plist-name>.plist


1
sudo apachectl restart

Apache'nin bir parçası olduğu gibi diğer OSses'lerle de çalışır.


1
Konu özellikle apache'den bahsetmese de, bu yorumu tahmin etmeliydim .... Üzgünüm, ama aradığım şey bu değildi :)
conny

Tamam, ben apachectl kullanarak daha kolay bir varyant olan httpd bölümünü yakaladım :)
Sven

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.