Intereting Posts
Есть что-то вроде «xdg-close» – напротив xdg-open? монтажный объем, защищенный от доступа пользователя Как я могу поделиться своим ноутбуком WiFi с моим Raspberry Pi через Ethernet? Что подразумевается под оболочкой в ​​режиме «vi» или «emacs»? Использование двойного щелчка в окне терминала в Fedora 24 с помощью vim для выполнения копирования и вставки Отключить перезагрузку / выключение / приостановить / etc из графического интерфейса Пароль Samba должен быть изменен после первого входа в систему Установка переменных readline в оболочке Индикатор и разрешение батареи XFCE Разбор csv с использованием awk Что называется символом *. *? Перенаправление портов OpenVPN без переадресации маршрутизатора? Могу ли я просматривать задачи, которые будут выполняться с помощью загружаемой книги? Автоматический вход через ssh (нет установленной среды GUI / отсутствует ssh-agent)? как получить статистику полученных пакетов на определенном порту udp

Остановка службы синхронная или асинхронная?

Я сделал sudo service ... stop прежде чем выключать машину удаленно, через SSH, но потом я понял, что не знаю, синхронно или нет, если stop и я подумал, не слишком ли я быстро выключил машину Ubuntu.

Так мои опасения основаны на неправильной догадке или нет?

Изменить: мой сервис является личным, он получает прослушивание материала из порта и время от времени записывает данные в базу данных. Я боюсь, что у вещей нет времени, чтобы его покраснели, если служба прекратилась внезапно. stop позаботится о том, чтобы смыть вещи, но с учетом времени, которое может потребоваться …

Это зависит от того, как остановлен ваш сервис. Только вы знаете: методы запуска и остановки службы – это вещи, которые вы должны документировать для пользователей своего сервиса и в идеале обеспечить.

Если ваша служба остановлена, отправив ей сигнал, вызвав kill из сценария оболочки, это асинхронно. Команда kill или системный вызов посылает сигнал процессу и немедленно возвращается. Механизм для процесса не существует, чтобы сообщить, что он обработал сигнал до его удовлетворения. Поэтому вам нужно найти другой метод, чтобы сообщить, что вы закончили.

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

Если ваша служба остановлена ​​с помощью директивы stop в описании услуги Upstart, Upstart отправляет сигнал процессу. Upstarts затем ждет несколько секунд, чтобы процесс остановился. Поскольку Upstart является родителем процесса, он получает уведомление от ядра (сигнал SIGCLD), когда процесс завершается. Это работает только тогда, когда процесс не вилка, чтобы поставить себя в фоновом режиме; В описаниях служб Upstart обычно звонят демоны с опцией, указывающей, что они не fork (например, ssh -D ).

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

Убедитесь, что ваше приложение

  1. регистрирует его надлежащее завершение работы в syslog, см. man 3 syslog для получения более подробной информации
  2. обрабатывает SIGTERM, записывая все необходимое в базу данных, закрывая соединение и выходя из него; см. man 2 sigaction для подробностей
  3. имеет обработчик остановки работы в /etc/init.d; см. man init и man stopping

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