Я новичок в Linux и тестирую себя на экземпляре Amazon Lightsail (Ubuntu 16.04 LTS).
Просматривая множество руководств, с которыми я сталкивался, я вижу людей, использующих различные команды для запуска / остановки / перезапуска / перезагрузки / проверки состояния службы. Именно эти;
sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status
Все вышеперечисленные команды работают.
- Должен ли я предпочесть одну команду другой?
- Если да, то почему?
- Есть ли другие команды, о которых мне нужно знать?
Использование init.d в Monit вызвало проблемы, когда я захотел использовать опцию состояния (статус будет состоять в том, что служба была отключена, когда она была на самом деле - перезапущена Monit). Измените код в Monit с inid.d на / bin / systemctl и исправьте его.
Кажется, что использование init.d предоставляет больше информации о том, что случилось с другими. Если мне нужно использовать одну из других команд, возможно ли, чтобы они отображали больше информации о том, что было сделано?
ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Я хотел бы заранее поблагодарить всех, кто нашел время, чтобы прочитать и ответить на этот вопрос.
источник
systemctl
является предпочтительным синтаксисом иservice
предоставляется в качестве обратной совместимости./etc/init.d/pure-ftpd
или аналогичные вызовы сценариев запуска / остановки напрямую.Ответы:
Для начала, есть целая история и борьба между переходом от
SysVInit
кSystemD
. Вместо того, чтобы пытаться разбить все это в одном ответе, я отсылаю вас к некоторой авантюре Google для получения дополнительной информации об истории, а также к одной конкретной статье по этой теме:http://www.tecmint.com/systemd-replaces-init-in-linux/
В целом, это был медленный и трудный переход. Некоторые устаревшие функции были сохранены (например, в
init.d
некоторой степени). Если у вас есть возможность использоватьsystemctl
для управления сервисом, я рекомендую использовать его. Это предвидимое будущее для Linux, и в конечном итоге старыеSysVInit
методы будут считаться устаревшими и полностью удалены.Чтобы охватить каждого из перечисленных вами конкретно:
sudo systemctl status apache2.service
Это новый
SystemD
подход к обслуживанию услуг. В дальнейшем приложения в Linux предназначены для использования метода systemd, а не любого другого.sudo /bin/systemctl status apache2.service
Это то же самое, что и предыдущая команда. Единственное отличие в этом случае состоит в том, что
$PATH
поиск команды не зависит от переменной окружения оболочки , а выводит ее в явном виде, включая путь к команде.sudo /etc/init.d/apache2 status
Это оригинальный
SysVInit
метод вызова службы. Сценарии инициализации будут написаны для службы и помещены в этот каталог. Хотя этот метод все еще используется многими,service
была команда, которая заменила этот метод вызова служб вSysVInit
. В более новых системах есть некоторые устаревшие функции для этогоSystemD
, но большинство новых программ не включают это, и не все более старые сценарии инициализации приложений работают с ним.sudo service apache2 status
Это был основной инструмент, используемый в
SysVInit
системах для служб. В некоторых случаях он просто связывался со/etc/init.d/
сценариями, но в других случаях он переходил к сценарию инициализации, хранящемуся в другом месте. Он должен был обеспечить более плавный переход к обработке зависимостей службы.Наконец, вы упомянули о желании узнать, как получить больше информации из команд, поскольку некоторые предоставляют больше информации, чем другие. Это почти всегда определяется приложением и тем, как они разработали свой файл инициализации или службы. Как правило, хотя, если он завершен в молчании, он был успешным. Однако, чтобы проверить
start
,stop
илиrestart
, вы можете использоватьstatus
суб-команду , чтобы увидеть , как он делает. Вы упомянулиstatus
неправильную команду в старом скрипте инициализации. Это ошибка, на которую должны были бы обратить внимание разработчики приложений. Однако, поскольку сценарии инициализации становятся устаревшим методом обработки служб, они могут просто игнорировать ошибку, пока полностью не удалят параметр сценария инициализации.systemctl status
должен всегда работать правильно, иначе ошибка должна регистрироваться разработчиками приложения.источник
systemctl
будут искать каталоги, в которых хранятся служебные файлы, и добавят вам «.service», если он его найдет. Так, например, если вы нажмете вкладку один раз после того, как только напишите,sudo systemctl status apache2
она должна завершить его, добавив.service
для вас Если существует более одного файла apache2 systemctl (например,.service
и.target
вам нужно дважды нажать вкладку, чтобы он отображал все доступные опции.