Как запустить мой скрипт после того, как SuSE закончил начальную загрузку?

Хорошо, я решил те проблемы:

  • связанный /usr/local/bin/bash кому: /bin/bash
  • связанный /usr/local/bin/byobu-config кому: /usr/bin/byobu-config
  • связанный /usr/local/bin/byobu-status кому: /usr/bin/byobu-status
  • Переустановленный тритон от набора портов с WITH_PYTHON=true
7
17.07.2012, 04:07
4 ответа

Более новый синтаксис для Suse Linux Enterprise 11 SP2 (и openSUSE?)

Лучший способ состоял бы в том, чтобы создать сценарий оболочки, который назовет Ваш Сценарий PHP. Этот сценарий оболочки должен иметь в его заголовке следующий комментарий:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          nothing
# Required-Start:    $all
# Default-Start:     3 5
# Default-Stop:      4
# Short-Description: single_line_description
# Description:       multiline_description
### END INIT INFO

Можно найти типичный шаблон (с загрузками пояснительных текстов) в /etc/init.d/skeleton. Этот шаблон включает необходимый код для сцепления Сценария PHP. Вы будете видеть случай запуска, где необходимо было бы назвать Сценарий PHP.
Я отбросил много дополнительных параметров в заголовке, поскольку не кажется, что Вам были бы нужны они.

Важный
Важно использовать скелет, по крайней мере, оператор выбора (см. init действия сценариев), и реализовать случай запуска, по крайней мере. В случае запуска это - то, где назвать Ваш сценарий.

Можно найти здесь небольшой пример сценария, который назовут в конце начальной загрузки: посмотрите мою Суть. Я поместил недопустимый уровень выполнения для Остановки по умолчанию, но так или иначе сценарий все еще называют во время завершения работы. Так или иначе код в случае "остановки" выполнен, не тот в случае "запуска" при закрытии.

После того как Вы записали свой сценарий, скопируйте его в /etc/init.d давайте предположим, что Ваш init сценарий называют уведомлением начальной загрузки, затем Вы сделали бы (как корень):

chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/

Затем необходимо "зарегистрировать" сценарий в init системе. Вы будете использовать insserv команда (снова как корень) или можно использовать YaST:

insserv boot-notification

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

ls -l /etc/init.d/rc3.d/S*

Это возвратит список ссылок на init сценарии. Ссылка на Ваш сценарий должна быть в конце (или около него) списка.

Примечание: Если бы Вы хотите играть вокруг с более динамическим способом записать init сценарии, я советовал бы читать эти 2 страницы:

5
27.01.2020, 20:15
  • 1
    я не выполнял Ваши шаги 100% я только, использовал Ваши новые заголовки для сценария, и теперь я вижу описание в yast. Моя проблема состоит в том, что сценарий является триггерами перед перезагрузкой и после. Я не хочу это, происходят прежде. –  Radek 20.07.2012, 02:10
  • 2
    YaST, вероятно, добавил сценарий к перезагрузке и завершению работы init. При использовании скелета (проверьте ссылку openSuse, он содержит более простой, посмотрите в разделе 'Action'). Необходимо быть уверены, что, когда запуск, вызывают, Вы называете свой Сценарий PHP. Когда остановка, вызывают, Вы не называете ее. Или можно использовать @Petr-Uzel решение также, затем Вы просто называете свой Сценарий PHP, никакая потребность применить скелетную структуру. –  Huygens 20.07.2012, 12:34
  • 3
    Вы знали бы, как проверить, если вызов сценария является частью завершения работы init? –  Radek 23.07.2012, 03:21
  • 4
    @Radek при закрытии или перезагрузке, runlevel изменяются на (соответственно) 0 или 6. Если у Вас есть сценарий в/etc/init.d/rcn.d/K* с n, равным 0 или 6, то это называют во время завершения работы. Я добавил суть (см. ссылку в моем ответе) с простым сценарием Вы могли снова использовать для вызова Сценария PHP. –  Huygens 23.07.2012, 10:15
  • 5
    После проверки runlevel для того, чтобы закрыться и перезагрузка корректны, однако, сценарии не являются местом там. Но в их соответствующем запуске runlevel. Таким образом, при помещении runlevel 3 для запуска сценария, затем в runlevel 3 Вы будете видеть сценарий завершения работы, различие - то, что для запуска, ссылка на сценарий является S <nn> <имя файла>, тогда как для завершения работы это - K <nn> <имя файла> –  Huygens 23.07.2012, 10:32

(открытое) использование SUSE /etc/init.d/after.local с этой целью. Просто добавьте команды, Вы должны быть выполнены в тот файл. Обратите внимание, что это хорошо работает с SystemV init, но с systemd этому был бы нужен AFAIK, должен быть решен по-другому.

8
27.01.2020, 20:15
  • 1
    Это выполняет сценарии сразу после начальной начальной загрузки машины, не конца init процесса начальной загрузки... AFAIK –  Huygens 17.07.2012, 11:38
  • 2
    Да, конечно, Вы правы, Спасибо! корректный файл является/etc/init.d/after.local. Обновление моего ответа. –  Petr Uzel 17.07.2012, 15:00
  • 3
    Прохладный файл, что-то я должен помнить! +1 –  Huygens 17.07.2012, 15:01
  • 4
    Это, кажется, не работает в openSuse с тех пор 12.1: forums.opensuse.org/blogs/jdmcdaniel3 / …, но это сообщение в блоге предлагают работу вокруг. –  Huygens 20.07.2012, 12:39

Добавить новый init сценарий является довольно прямым на SuSe.

Лучший способ состоял бы в том, чтобы создать сценарий оболочки, который назовет Ваш Сценарий PHP. Этот сценарий оболочки должен иметь в его заголовке следующий комментарий:

#!/bin/sh
#chkconfig: 35 99 00
#description: Notify of boot completion

Можно найти типичный шаблон (с загрузками пояснительных текстов) в /etc/init.d/skeleton.compat (что каждый поддерживает chkconfig синтаксис, Вы имеете также 7etc/init.d/skeleton который поддерживает более новый стандарт LSB, но это, немного больше усложняют для объяснения Вас, как настроить его, хотя это более мощно). Этот шаблон включает необходимый код для сцепления Сценария PHP. Вы будете видеть случай запуска, где необходимо было бы назвать Сценарий PHP.

Важное число, которое я дал Вам, идет chkconfig line.

  • 35: средства, которыми этот сценарий назовут в любом init 3 (консольный режим, обычный для сервера) или init 5 (графический режим, более характерный для рабочего стола)
  • 99: приоритет или в init 3 или в 5. Это означает, что это назовут в последний раз. Обратите внимание, что некоторые другие сценарии начальной загрузки можно было назвать с приоритетом 99.
  • 00: приоритет для завершения работы/перезагрузки. У Вас могло также быть уведомление, как только система понижается.

После того как Вы записали свой сценарий, скопируйте его в /etc/init.d давайте предположим, что Ваш init сценарий называют уведомлением начальной загрузки, затем Вы сделали бы (как корень):

# chown root:root boot-notification
# chmod 0750 boot-notification
# mv boot-notification /etc/init.d/

Затем необходимо "зарегистрировать" сценарий в init системе. Вы будете использовать chkconfig команда (снова как корень):

# chkconfig --add boot-notification

Проверьте, что это было принято во внимание правильно:

# chkconfig boot-notification
boot-notification on

Если Вы видите на, это хорошо!
Затем можно далее проверить, что сценарий является одним из последних, которые будут выполнены путем изучения каждого init уровня. Если бы Вы выбрали только runlevel 3, то Вы могли сделать это:

$ ls -l /etc/init.d/rc3.d/S*

Это возвратит список ссылок на init сценарии. Ссылка на Ваш сценарий должна быть в конце (или около него) списка.

Примечание: Если бы Вы хотите играть вокруг с более динамическим способом записать init сценарии, я советовал бы читать эти 2 страницы:

2
27.01.2020, 20:15
  • 1
    я создал сценарий, скопированный в/etc/init.d, и зарегистрировался через yast для runlevel 3 и 5. Теперь это инициировано, прежде чем перезагрузка запускается и после того, как это заканчивается. Затем я добавил заголовок, который Вы предложили, но он все еще отсылает сообщение перед начальной загрузкой. Какая-либо идея, как остановить это? –  Radek 19.07.2012, 03:36
  • 2
    OK, YaST не поддерживает наследие synax, это кажется. Я' собирающийся предлагать Вам другой ответ с последним синтаксисом затем. –  Huygens 19.07.2012, 16:31

Для (богомола) OpenSUSE 12.2 сценарий для "после локального" должен быть /etc/init.d/after-local , и Вы, возможно, должны включить его через systemctl, как это...

Включить/etc/init.d/after-local,

systemctl enable after-local.service

Проверять состояние/etc/init.d/after-local,

systemctl status after-local.service
4
27.01.2020, 20:15

Теги

Похожие вопросы