Jak uruchomić / zatrzymać / uruchomić ponownie uruchomione usługi z wiersza poleceń?

149

Jak zrestartować, powiedzmy na przykład mój httpd lub afpd, działając na dowolnym Mac OS X> = 10.5 (Leopard-), bez konieczności używania GUI i przejścia do Preferencji systemowych -> Udostępnianie oraz odznaczanie / zaznaczanie „Udostępnianie Internetu”?

Szukam kanonicznego odpowiednika Debiana invoke-rc.d apache2 restart.

EDYCJA: Pytanie dotyczy uruchomienia kontrolowanych usług w ogóle , a nie Apache (co było po prostu przykładem).

conny
źródło
1
Czy na podstawie dotychczasowych odpowiedzi można poprawnie założyć, że nie ma pojedynczego polecenia launchctl do ponownego uruchomienia usługi?
JS.
@JS. Według strony podręcznika, kickstartwraz z -kopcją wydaje się załatwić sprawę. Zobacz moją odpowiedź poniżej ...
Jochen

Odpowiedzi:

158

Cześć launchctl (8) jest twoim przyjacielem. Pamiętaj tylko, że niektóre usługi (na przykład sshd) są wyłączone w pliku konfiguracyjnym, więc -wpodczas ładowania będziesz musiał użyć przełącznika. Oto przykład sshd:

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

Możesz zatrzymać usługę za pomocą unloadpodkomendy.

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

Aby wyświetlić listę usług, jak już zapewne zgadłeś, użyj komendy „list”;)

baw się dobrze, n

nayden
źródło
9
Ponadto launchctl listnie narzeka, ale nie pokazuje wszystkiego, sudo launchctl listjest do tego potrzebny.
conny
9
Nie chodzi o to, że nie pokazuje wszystkiego, pokazuje zupełnie inną listę. Kiedy launchctldziałasz jako zwykły użytkownik, pokazuje / zarządza LaunchAgents uruchomionymi w sesji użytkownika; uruchom jako root, pokazuje / zarządza ogólnosystemowymi LaunchDaemons.
Gordon Davisson
1
Na tej liście widzę „com.openssh.sshd”, więc sądzę, że konfiguracja została „załadowana”. Teraz, jak to się stało na przykład sudo launchctl start com.openssh.sshdnie robi nic , nie Evan niepowodzeniem z komunikatem o błędzie, nawet mniej, więc faktycznie uruchomić cokolwiek?
conny
2
@conny W ogólnym przypadku może to być mylące, jednak gdy piszesz usługę i podejrzewasz na przykład, że podczas uruchamiania dzieje się coś nieprzyjemnego, możesz ją załadować raz i użyć polecenia „stop” / „start” w celu debugowania problemu .
nayden
6
Dlaczego nie ma wzmianki o launchctl start <label>lub launchctl stop <label>? Jeśli jest już uruchomiony przez launchctl, nie ma potrzeby przeładowywania pliku plist (chyba że również się zmienił?). Jest to denerwujące, nie ma restartlub reloadpoleceń. Czy ktoś zna sposób, w jaki mongod pobiera zmianę pliku konfiguracyjnego za pomocą jednego polecenia? Po prostu nie jestem zadowolony ... stop ... && ... start ....
Brian
7

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


źródło
4

Aby ponownie uruchomić usługę, możesz użyć launchctl kickstartpolecenia wraz z -kopcją. Na przykład, aby zrestartować apache, możesz użyć

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

Ta informacja pochodzi ze strony launchctlpodręcznika:

 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.
          [...]
jochen
źródło
1
Kiedy próbowałem tego, moja usługa się zawiesiła, nie zatrzymała się po krótkim oczekiwaniu, „zabójstwo” na pid nie pomogło, wykonanie „zabij -9” na pid zabiło proces i pozwoliło na rozpoczęcie (które uruchomiono w innym konsoli, gdy próbowałem zabić proces), kontynuuj i ponownie uruchom usługę. Nie zaczekałem długo, zanim zacząłem ręcznie zabijać rzeczy, więc wystarczyło czekać wystarczająco długo, aby rozwiązać problem.
Samuel Åslund
3

Możesz po prostu zrobić

sudo launchctl stop com.openssh.sshd

Jeśli nie znasz pełnej nazwy usługi, możesz to zrobić

sudo launchctl list

Jeśli nadal nie możesz znaleźć oczekiwanej usługi, spróbuj uruchomić bez tożsamości użytkownika root:

launchctl list

I nie musisz rozładowywać i ładować usługi.

Dmitriy Apollonin
źródło
1
Próbowałem tego i teraz nie mogę korzystać sshz mojego komputera Mac. Ponowne uruchomienie się nie naprawia. Wymiana stopz startrównież nie rozwiąże.
P i
1
Próbowałem tego i nadal mogę ssh na moim Macu!
Michael
@ dmitriy-apollonin To nie działa, musisz użyć sudo unload /System/Library/LaunchDaemons/ssh.plistzamiast tego.
SebMa,
Pytanie dotyczy ponownego uruchomienia usługi, ale nie sądzę, że to launchctl stoppowoduje ponowne uruchomienie usługi.
jochen
2

Szukasz 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.
eric.s
źródło
2
Ale czytanie strony podręcznika nie mówi mi, co jest równoważne z którymkolwiek invoke-rc.d my-little-daemon restart... Odnosi się do „Job_label”, ale nie mówi mi, jak wyświetlić listę „Job_label” dostępnych.
conny
Myślę, że odpowiedź Naydena to ujęła.
eric.s.
2

Na wszelki wypadek, jeśli szukasz launchctl reload, możesz zdefiniować funkcję powłoki ~/.bashrc/.zshrctak jak ja:

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
}

Wykonanie polecenia wygląda jak -> lctl reload <your-plist-name>.plist

Dzmitry Hubin
źródło
1
sudo apachectl restart

Działa z innymi systemami operacyjnymi, a także jest częścią Apache.

Sven
źródło
1
Chociaż temat nie wspomina w szczególności o apaczu, powinienem był przewidzieć tę interpretację ... Przepraszam, ale nie tego szukałem :)
conny
Ok, złapałem część httpd, dla której użycie apachectl jest łatwiejszym wariantem :)
Sven
0

Istnieje mała i przydatna aplikacja dla tego o nazwie Lingon. Lingon freeware Edition jest tutaj czasem ponowne uruchomienie usługi może być trudne.

syslog -w

czytanie pomaga.

risyasin
źródło