명령 행에서 실행 된 서비스를 시작 / 중지 / 다시 시작하는 방법은 무엇입니까?


149

GUI를 사용하지 않고 Mac OS X> = 10.5 (Leopard-)를 실행하고 시스템 환경 설정-> 공유 로 이동 하고 "웹 공유"를 선택 해제 / 체크 해제 하지 않고 httpd 또는 afpd와 같이 어떻게 다시 시작 합니까?

데비안과 동등한 표준을 찾고 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일반 사용자로 실행하면 사용자 세션에서 실행중인 LaunchAgent를 표시 / 관리합니다. 루트로 실행하면 시스템 전체의 LaunchDaemon을 표시 / 관리합니다.
Gordon Davisson

1
해당 목록에서 "com.openssh.sshd"를 볼 수 있으므로 구성이 "로드"된 것 같습니다. 자, 예를 들어 sudo launchctl start com.openssh.sshd어떻게 아무것도 하지 않고 , 오류 메시지로 에반이 실패 하지 않고 , 실제로 실제로 아무것도 실행하지 않습니까?
conny

2
@conny 일반적인 경우에는 혼란 스러울 수 있지만 서비스를 작성 중이고 시작시 문제가 발생하는 것으로 의심되는 경우 한 번로드하면 'stop'/ 'start'를 사용하여 문제를 디버깅 할 수 있습니다. .
nayden

6
launchctl start <label>또는에 대한 언급이없는 이유는 무엇 launchctl stop <label>입니까? launchctl에 의해 이미 시작된 경우 plist 파일을 다시로드 할 필요가 없습니다 (변경되지 않는 한)? restart또는 reload명령 이 없다는 것이 짜증납니다 . mongod가 구성 파일 변경을 선택하는 단일 명령 방법을 아는 사람이 있습니까? 난 그냥 만족하지 않습니다 ... stop ... && ... start ....
Brian

7

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


5

서비스를 다시 시작하려면 옵션 launchctl kickstart과 함께 명령을 사용할 수 있습니다 -k. 예를 들어, 아파치를 다시 시작하려면

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"를 수행하면 프로세스가 종료되고 킥 스타트가 시작되었습니다 (다른 시스템에서 실행 중임) 프로세스를 종료하려고 시도하는 동안 콘솔) 서비스를 계속하고 다시 시작하십시오. 나는 물건을 수동으로 죽이기 시작하기 전에 오랫동안 기다리지 않았으므로 오랫동안 기다리면 문제를 해결할 수있을 것입니다.
Samuel Åslund

3

당신은 단순히 할 수 있습니다

sudo launchctl stop com.openssh.sshd

전체 서비스 이름을 모르면 할 수 있습니다

sudo launchctl list

여전히 원하는 서비스를 찾지 못하면 루트 ID없이 실행 해보십시오.

launchctl list

또한 서비스를 언로드 및로드 할 필요가 없습니다.


1
나는 이것을 시도했고 지금 ssh은 내 Mac에서 사용할 수 없습니다 . 재부팅해도 문제가 해결되지 않습니다. 교체 stopstart도 해결되지 않습니다.
P i

1
나는 이것을 시도했지만 여전히 내 Mac으로 ssh 할 수 있습니다!
Michael

@ dmitriy-apollonin 작동하지 않습니다 sudo unload /System/Library/LaunchDaemons/ssh.plist. 대신 사용해야 합니다.
SebMa

문제는 서비스를 다시 시작하는 것에 관한 것이지만 서비스를 다시 시작한다고 생각하지 않습니다 launchctl stop.
jochen

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의 응답이 이것을 커버했다고 생각합니다.
eric.s

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

다른 OS와 함께 작동하며 Apache의 일부입니다.


1
비록 주제가 아파치를 언급하지 않더라도, 나는이 해석을 예상했을 것이다 .... 미안하지만, 그것이 내가 찾고 있던 것은 아니었다 :)
conny

좋아, 나는 apachectl을 사용하는 것이 더 쉬운 변형 인 httpd 부분을 잡았다 :)
Sven

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.