Як запустити / зупинити / перезапустити запущені служби з командного рядка?


149

Як перезапустити, скажімо, наприклад, мою httpd або afpd, запустивши будь-яку Mac OS X> = 10.5 (Leopard-), не використовуючи GUI і перейти до Системних налаштувань -> Спільний доступ і зняти прапорці / встановити прапорець "Веб-обмін"?

Я шукаю канонічний еквівалент Debian invoke-rc.d apache2 restart.

EDIT: Питання стосується запущених керованих служб взагалі , а не конкретно Apache (-що було просто прикладом).


1
З відповідей поки що, чи правильно вважати, що немає єдиної команди startctl для перезапуску послуги?
JS.

@JS. Згідно з інструкцією на сторінці, kickstartразом із -kваріантом, здається, зробити трюк. Дивіться мою відповідь нижче ...
jochen

Відповіді:


158

Привіт, запуск (8) - твій друг. Зауважте, що деякі сервіси (наприклад, sshd) відключені у файлі конфігурації, тому вам потрібно буде використовувати -wкомутатор під час завантаження. Ось sshd приклад:

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

Ви можете зупинити послугу за допомогою unloadпідкоманди.

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

Щоб перелічити служби, як ви вже здогадалися, скористайтеся підкомандою 'list';)

веселитися, н


9
Крім того, launchctl listне скаржиться, але не показує все, sudo launchctl listдля цього потрібно.
conny

9
Справа не в тому, що вона не показує все, це зовсім інший список. Коли ви працюєте launchctlяк звичайний користувач, він показує / керує LaunchAgents, що працює у вашому сеансі користувача; запустити як root, він показує / керує загальносистемними LaunchDaemons.
Гордон Девіссон

1
Я можу побачити "com.openssh.sshd" у цьому списку, тому я думаю, що конфігурація "завантажена". Тепер, як же, наприклад , sudo launchctl start com.openssh.sshdробить нічого , що не Evan невдало з повідомленням про помилку, навіть менше , так що на насправді запустити що - небудь?
conny

2
@conny Це може бути заплутано в загальному випадку, однак, коли ви пишете службу і підозрюєте, наприклад, що при запуску відбувається щось неприємне, ви можете завантажити її один раз, а для налагодження проблеми скористайтеся функцією 'stop' / 'start'. .
найден

6
Чому не згадується launchctl start <label>або launchctl stop <label>? Якщо це вже запущено запусканням, немає необхідності перезавантажувати файл плістів (якщо він також не змінився?). Дратівливо немає ні команди, restartні reloadкоманди. Хтось знає про однокомандний спосіб змусити (наприклад) mongod забрати зміну конфігураційного файлу? Я просто не задоволений ... stop ... && ... start ....
Брайан

7

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


4

Щоб перезапустити послугу, ви можете використовувати launchctl kickstartкоманду разом із -kопцією. Наприклад, для перезапуску apache ви можете використовувати

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
Коли я спробував цю службу, то моя послуга висіла, вона не зупинилася після короткого очікування, "вбити" на під не допомогло, роблячи "убити -9" на pid вбив процес і нехай kickstart (що працює в іншому консолі, поки я намагався вбити процес) продовжуйте і запускайте службу заново. Я не чекав дуже довго, перш ніж почати вбивати речі вручну, тож чекати достатньо довго могло, щоб вирішити проблему.
Самуель Ослунд

3

Ви могли просто зробити

sudo launchctl stop com.openssh.sshd

Якщо ви не знаєте повного імені служби, можете зробити це

sudo launchctl list

Якщо ви все ще не знайдете потрібну послугу, спробуйте запустити без кореневої ідентичності:

launchctl list

І вам не потрібно розвантажувати та завантажувати сервіс.


1
Я спробував це, і тепер я не можу використовувати sshсвій Mac. Перезавантаження не виправляється. Заміна stopз startтакож не виправити.
П я

1
Я спробував це, і я все ще можу сш на свій Mac!
Майкл

@ dmitriy-apollonin Це не працює, sudo unload /System/Library/LaunchDaemons/ssh.plistзамість цього потрібно використовувати .
SebMa

Питання полягає у перезапуску послуги, але я не думаю, що launchctl stopце перезапуск послуги.
Йохен

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
Але читання man-сторінки не говорить мені, що еквівалент будь- invoke-rc.d my-little-daemon restartякого з них є ... Це стосується "job_label", але не підказує мені, як перелічити наявні "job_label".
conny

Я думаю, що відповідь Найдена охопила це.
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

Працює з іншими ОС, а також є частиною Apache.


1
Незважаючи на те, що зокрема не йдеться про апаш, я повинен був передбачити цю інтерпретацію .... Вибачте, але я не шукав цього :)
conny

Гаразд, я схопив частину httpd, для якої використання apachectl є найпростішим варіантом :)
Sven

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.