Линукс как перезапустить программу

Обновлено: 05.07.2024


У меня есть две системы Linux, которые обмениваются данными через сокеты (настольный компьютер и плата разработки на базе ARM).

Я не могу понять, как это нужно делать.

Обычный способ сделать это - позволить программе выйти и перезапустить ее с помощью системы мониторинга. В init программа предлагает такую ​​систему мониторинга. Существует множество различных программ инициализации (SysVinit, BusyBox, Systemd и т. Д.) С совершенно разными механизмами конфигурации (всегда записывается файл конфигурации, но расположение и синтаксис файла различаются), поэтому поищите документацию к той, которую вы Использую. Настройте init для запуска вашей программы во время загрузки или по явному запросу и для перезапуска, если она умирает. Существуют также более интересные программы мониторинга, но, похоже, они вам не нужны. Этот подход имеет много преимуществ по сравнению с перезапуском программы самостоятельно: он стандартный, поэтому вы можете перезапустить несколько служб, не заботясь о том, как они созданы; он работает, даже если программа умирает из-за ошибки.

Есть стандартный механизм, который сообщает процессу о завершении: сигналы. Отправьте вашей программе сигнал TERM. Если вашей программе необходимо выполнить какую-либо очистку, напишите обработчик сигнала. Это не исключает наличия специальной команды для ее выключения, если у вас есть административный канал для отправки ей подобных команд.

Этот restart.c работает так:

Если клиентское приложение является службой Linux, его можно перезапустить с помощью этой команды:

или принудительно перезагрузить его конфигурацию:

Если, что более вероятно, это настраиваемое приложение, ему необходимо встроить в свой код функцию, чтобы перезапустить себя или перезагрузить свою конфигурацию при получении сигнала или события. Если этого не сделать, в крайнем случае вы всегда можете убить клиентское приложение:

и снова перезапустите, но это некрасиво, поскольку оно оставляет приложение в неопределенном состоянии.

  • 1 Если приложение уже не находится в фиктивном состоянии, -9 аргумент pkill не требуется, неиспользование должно позволить приложению полностью остановиться.
  • @ dr01 Если приложение не является сервисом, то как его перезапустить?
  • @SaadRafey: это написано в моем ответе, возможность перезапуска себя чисто или перезагрузить конфигурацию должна быть прописана в коде.
  • Я думаю, это работает только со СТАРЫМИ версиями UBUTNU
  • @noone Вовсе нет, это стандартная команда SystemV для управления службами. Это правда, что большинство современных версий дистрибутивов используют Systemd.

Я сделал функцию для выполнения команды в оболочке:

Затем, чтобы убить процесс и перезапустить его, я использовал:

Я использовал команду nohup, потому что она освобождает терминал после выполнения команды. Теперь, чтобы вызвать запуск этого сценария, вы можете написать в основном потоке программы:

Как и во всех других операционных системах, в Linux есть службы и процессы, выполняемые во время работы системы в фоновом режим. Когда система загружается, сервисы запускаются автоматически и продолжают работать, пока система не выключится. Однако вы можете запускать, останавливать и перезапускать службы вручную.

Рассмотрим различные способы запуска, остановки и перезапуска служб в Ubuntu с помощью systemd, команды service и сценария инициализации init.

Список всех сервисов в Ubuntu
Прежде всего нужно получить список всех служб на вашем компьютере.

Он покажет полный список сервисов на вашем компьютере.


Использование Systemd для запуска / остановки / перезапуска служб в Ubuntu

Вы можете запускать, останавливать или перезапускать сервисы с помощью утилиты systemd systemctl. Начиная с версии 16.04 Ubuntu включает в себя systemd как init-систему по умолчанию. На сегодняшний день это предпочтительный способ работы со службами.

sudo systemctl [действие] [имя службы]

Например, рассмотрим как запустить, остановить или перезапустить службу брандмауэра ufw в Ubuntu.

Откройте окно терминала и введите следующие команды.

Проверить статус службs:

Управление сервисами с помощью systemd

Запуск / остановка / перезапуск сервисов в Ubuntu с помощью команды service

Вы также можете запускать, останавливать или перезапускать службы, используя service. Откройте окно терминала и введите следующие команды.

Проверить статус службы:

Использование скриптов Init для управления сервисами в Ubuntu

Вы можете запускать, останавливать или перезапускать службы, используя сценарии инициализации в каталоге /etc/init.d. Этот каталог на самом деле содержит в себе различные скрипты для разных сервисов. Сценарии инициализации устарели с тех пор, как Ubuntu перешла на Systemd, поэтому этот метод будет использоваться, только если вам приходится иметь дело со старой версией Ubuntu. Откройте окно терминала и введите следующие команды.

Проверить статус службы:

Таким образом, вы можете запускать, останавливать и перезапускать службы разными способами, не перезагружая всю операционную систему. Вы также можете использовать эти команды в других дистрибутивах Linux.

В операционной системе Windows есть окно служб, с помощью которого вы можете управлять всеми службами, включая их просмотр, запуск и остановку. Точно так же у вас есть терминал в операционных системах Linux (Debian) для того же.

В этой статье я собираюсь сосредоточиться на различных способах запуска, остановки и перезапуска служб в Debian версии 10.

Как перечислить все службы в Debian 10

Если вы хотите просмотреть все службы, запущенные в Debian 10, вы можете запустить следующую команду.


Если вы хотите получить более подробный список всех служб и процессов, работающих в вашей операционной системе Debian, выполните следующую команду.


Вы должны запустить вышеуказанные команды с привилегиями root, иначе у вас будет ошибка, как показано на следующем снимке экрана.


Как проверить состояние определенной службы с помощью init.d

Есть несколько способов проверить состояние конкретной службы, запущена она или нет. Одним из таких способов является использование init.d. Вы можете выполнить команду с правами root, имеющими следующий синтаксис:

Давайте проверим состояние сетевой службы. Полная команда должна выглядеть следующим образом:


Сверху ясно видно, что сетевые интерфейсы активны.

Как проверить состояние конкретной службы с помощью systemctl

Один из вторых способов проверки состояния конкретной службы - с помощью systemctl. Синтаксис команды следующий:

Мы снова возьмем пример сетевого сервиса для проверки его статуса. Для этого выполните следующую команду с привилегиями root на терминале Debian.


Когда результаты возвращаются, они ясно показывают, что сетевой сервис работает и интерфейсы работают.

Как остановить, запустить и перезапустить определенный сервис

Есть два способа остановить и запустить определенный сервис. Я перечислю здесь оба метода.

Запуск и остановка службы с помощью init.d

Позвольте мне начать с остановки уже работающей сетевой службы, чтобы показать вам, как остановить любую службу с помощью init.d. Выполните следующую команду с правами суперпользователя,


Полный синтаксис команды должен выглядеть следующим образом:

Чтобы подтвердить состояние сетевой службы, давайте выполним уже описанную команду.


На скриншоте выше четко видно, что сетевой сервис не работает, а интерфейсы неактивны.

После того, как сетевой сервис был остановлен, давайте запустим его, чтобы показать вам способ запуска любого сервиса. Команда должна выглядеть следующим образом:


Поэтому синтаксис команды должен быть следующим.

Давайте подтвердим, что сетевой сервис успешно запущен. Поэтому бери статус.


Мы успешно запустили сетевой сервис, как показано на скриншоте выше.

Запуск и остановка службы с помощью systemctl

Службы можно запускать и останавливать с помощью systemctl.Давайте остановим уже работающий сетевой сервис. Выполните следующую команду с правами суперпользователя,

Команда не выдаст никаких результатов на экране. Для подтверждения выполните следующую команду,


Выше на скриншоте четко видно, что сетевая служба остановлена ​​и сетевые интерфейсы неактивны.

После запуска службы позвольте мне запустить ее, чтобы показать вам способ запуска любой службы. Синтаксис команды следующий:

Как только вышеуказанная команда выполнена успешно, она ничего не показывает на терминале. Чтобы убедиться, что служба успешно запущена, проверьте ее состояние с помощью уже описанной команды.


Вывод команды показывает, что сетевой сервис успешно запущен и его интерфейсы работают.

Перезапустите сервис, используя init.d и systemctl

Вы можете напрямую перезапустить любой сервис с помощью init.d и systemctl. Синтаксис обеих команд должен быть следующим:

Чтобы перезапустить сетевой сервис, приведенные выше команды должны выглядеть следующим образом.

Когда эти команды успешно выполнены, они ничего не возвращают на терминале. Вы можете подтвердить их статус после поиска активной и временной отметки в выходных данных команды.


Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо проблемы или предложения, пожалуйста, дайте мне знать, написав в разделе комментариев.

Favorite

Добавить в избранное

Главное меню » Debian » Остановка, запуск и перезапуск служб в Debian

(1 оценок, среднее: 5,00 из 5)

Остановка, запуск и перезапуск служб в Debian

В этой статье объясняется, как запускать, останавливать и перезапускать службы в Debian 11 Bullseye с помощью как systemctl, так и служебных команд.

Сервисы в Linux Debian 11

Запуск, остановка и перезапуск служб в Debian 11 с помощью Systemd

В этом разделе руководства показаны примеры выполнения действий, описанных в следующей таблице.

ДЕЙСТВИЕ КОМАНДА
Проверить статус услуги sudo systemctl status <имя_службы>
Остановить службу sudo systemctl stop <имя_службы>
Запустить службу sudo systemctl start <имя_службы>
Перезапустить службу sudo systemctl restart <имя_службы>

Как показано в предыдущей таблице, синтаксис для проверки состояния службы с помощью Systemd следующий:

Следовательно, чтобы проверить статус службы ssh, вы можете выполнить следующую команду.

Чтобы остановить службу, синтаксис аналогичен, просто замените параметр status на действие, которое вы хотите выполнить, в этом случае действие должно быть stop.

Например, чтобы остановить службу ssh, выполните команду ниже.

Чтобы запустить службу, просто замените stop на start. Чтобы запустить службу ssh, запустите:

Чтобы перезапустить службу, вам нужно ввести параметр перезапуск. Следующая команда используется для перезапуска службы ssh.

Вот так сервисы перезапускаются с помощью Systemd.

Остановка, запуск и перезапуск служб в Debian 11 с помощью служебной команды

Команда service используется для управления службами в каталоге /etc/init.d, несмотря на то, что некоторые дистрибутивы перенаправляют команду на ранее описанную команду systemctl .

Эту команду также можно использовать для остановки, запуска и перезапуска служб, следуя синтаксису, описанному в таблице ниже.

ДЕЙСТВИЕ КОМАНДА
Проверить статус услуги sudo service <имя_службы> status
Остановить службу sudo service <имя_службы> stop
Запустить службу sudo service <имя_службы> start
Перезапустить службу sudo service <имя_службы> restart

В этом разделе показаны примеры применения команд, описанных в приведенной выше таблице.

Чтобы проверить статус службы (в данном случае ssh) с помощью команды service, используйте синтаксис, показанный ниже. Замените «ssh» на службу, которую хотите проверить.

Команда, показанная на скриншоте ниже, используется для остановки служб. Запустите его, чтобы остановить службу ssh, или замените «ssh» на службу, которую хотите остановить.

Чтобы снова запустить службу ssh, используйте следующий синтаксис. Не забудьте заменить «ssh» на службу, которую вы хотите загрузить.

Наконец, чтобы перезапустить службы с помощью команды service, используйте приведенный ниже синтаксис.

Следующая команда может использоваться для перезагрузки конфигурации службы без прерывания самой службы.

Заключение

Благодарим вас за то, что вы прочитали эту статью, в котором объясняется, как останавливать, запускать и перезапускать службы в Debian 11. Следите за нами, чтобы получить дополнительные советы и руководства по Linux.

Читайте также: