Можно ли запустить скрипт первым при выключении / перезагрузке на Debian?

В настоящее время я пытаюсь зарегистрировать скрипт (расположенный в файле /etc/init.d) таким образом, чтобы этот сценарий выполнялся как первый скрипт / программа при завершении работы / перезагрузке (изменение на уровень 0 или 6) .

Я использовал update-rc.d stop_servers stop 0 0 6 . для регистрации сценария для этих двух уровней запуска. Он правильно зарегистрирован, но имеет имя K01stop_servers . Это делает скрипт не выполненным как первый.
Мне в основном нужно все, что нужно. Вот почему я хочу, чтобы это было первым.
А именно, мне все еще нужны мои серверы apache, mysql и (s) ftp, и моя java все еще полностью работоспособна.

Как мне это достичь?

Сценарий выглядит следующим образом:

 #! /bin/bash ### BEGIN INIT INFO # Provides: mc_server_safe_shutdown # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: # Default-Stop: 0 6 # Description: Shuts down all Minecraft serves softly ### END INIT INFO /root/.stop_servers exit 0 

  • Как использовать uswsusp для режима ожидания / спящего режима с помощью systemd? (Debian)
  • BunsenLabs (Deerrivative) не отключится (не удалось запустить poweroff.target: транзакция разрушительна)
  • Есть ли способ отключить выключение удаленной машины?
  • Прояснение процедуры завершения работы
  • RHEL6 Не удается запустить мой скрипт при завершении работы и перезагрузке
  • Gentoo portage продолжается после выключения
  • Использовать rtcwake без ввода пароля
  • debian dead при копировании более 1 ГБ
  • 2 Solutions collect form web for “Можно ли запустить скрипт первым при выключении / перезагрузке на Debian?”

    Правильный способ сделать то, что вы хотите сделать, – создать собственный сценарий инициализации, в котором перечислены необходимые зависимости. Внутри этого скрипта вы запускаете / останавливаете рассматриваемую службу, в зависимости от того, вызывается ли сценарий с start или stop в качестве первого параметра.

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

     # Required-Stop: $remote_fs $syslog apache2 mysql 

    потому что вам нужны запущенные средства remote_fs и syslog (но вам все равно, какой именно сервис предоставляет эти средства), и, в частности, запущенные службы apache2 и mysql , в то время, когда выдается действие остановки. Обратите внимание, что Java не является сервисом как таковым, но использование его может иметь зависимости от служб, включая файловые системы.

    Should-Stop и « Required-Stop описаны на странице служебной информации insserv (8):

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

    Имена указаны из « Provides (буквальные имена служб, без знака $ в начале) сценариев инициализации службы и из /etc/insserv.conf (имена объектов, знак $ в начале).

    Когда у вас есть сценарий так, как вы хотите, установите его с помощью update-rc.d или напрямую с помощью insserv .

    Если вы хотите выполнить скрипт только при выключении, вам не нужно:

     # Required-Start: $remote_fs $syslog 

    Вы можете оставить это пустым.

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

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

     $ cat /etc/init.d/apache2 ... # Provides: apache2 ... 

    а также:

     $ cat /etc/init.d/mysql ... # Provides: mysql ... 

    Теперь вы просто добавляете apache2 и mysql в свой скрипт в соответствии с директивой Required-Stop :

     # Required-Stop: apache2 mysql 

    Подробнее о заголовке скрипта инициализации вы можете прочитать здесь . Также есть информация об именах объектов, например упомянутые $remote_fs и $syslog :

    $ local_fs – монтируются все локальные файловые системы. Все сценарии, которые записывают в / var / должны зависеть от этого, если они уже не зависят от $ remote_fs.

    $ network – низкоуровневая сеть (Ethernet-карта, может означать запуск PCMCIA)

    $ named – демоны, которые могут предоставлять разрешение имени хоста (если они есть). Например, демоны для запроса DNS, NIS + или LDAP.

    $ portmap – демоны, предоставляющие службу отображения портов SunRPC / ONCRPC, как определено в RFC 1833 (если имеется), работают на всех удаленных

    $ remote_fs – монтируются все файловые системы. В некоторых средах времени выполнения LSB файловые системы, такие как / usr, могут быть удалены. Если скрипту необходимо установить / usr /, он должен зависеть от $ remote_fs. Скрипты, зависящие от $ remote_fs, не должны зависеть от $ local_fs. Во время выключения скрипты, которые должны запускаться до того, как атакующие будут убивать все процессы, должны зависеть от $ remote_fs.

    $ syslog – системный регистратор работает

    $ time – установлено системное время, например, с использованием сетевой программы времени, такой как ntp или rdate, или через аппаратные часы реального времени. Обратите внимание, что только в зависимости от ntp не будет получено точное время сразу после запуска ntp. Обычно требуется несколько минут, пока ntp не отрегулирует время. Также обратите внимание, что стандартный insserv.conf просто перечисляет hwclock как $ time.

    $ all – средство, поддерживаемое insserv для запуска скрипта после всех остальных скриптов, в конце последовательности загрузки. Это работает только для начала заказа, а не для остановки заказа. Невозможно зависеть от скрипта, который зависит от $ all.

    После того, как вы измените заголовок в сценарии инициализации, вам нужно запустить update-rc.d и он установит правильный порядок всех сценариев на основе их заголовков:

     # update-rc.d script defaults 
    Linux и Unix - лучшая ОС в мире.