
Я хочу, чтобы мой сервер уведомил меня (через рычание), что (пере)загрузка завершена. У меня есть готовый файл php, который отправляет рычание, но я не знаю, в какой файл добавить строку.
В какой файл мне нужно добавить мой код, чтобы он запускался только после завершения загрузки SuSE?
решение1
(open)SUSE использует /etc/init.d/after.local
для этой цели. Просто добавьте команды, которые вам нужно выполнить, в этот файл. Обратите внимание, что это отлично работает с SystemV init, но с systemd это нужно было бы AFAIK решать по-другому.
решение2
Более новый синтаксис для 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-скрипт.
Я отбросил ряд необязательных параметров в заголовке, поскольку, по-видимому, они вам не понадобятся.
Важный
Важно использовать скелет, по крайней мере, в операторе case (см.действия скриптов инициализации), и реализовать хотя бы начальный случай. В начальном случае это то, где нужно вызывать ваш скрипт.
Здесь вы можете найти небольшой пример скрипта, который будет вызван в конце загрузки:см. мой Gist. Я установил недопустимый уровень запуска для Default-Stop, но каким-то образом скрипт все равно вызывается во время выключения. В любом случае, код в случае "stop" выполняется, а не в случае "start" во время выключения.
После того, как вы написали свой скрипт, скопируйте его. /etc/init.d
Предположим, что ваш скрипт инициализации называется boot-notification. Тогда вам нужно сделать следующее (как пользователь root):
chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/
Затем вам нужно "зарегистрировать" скрипт в системе инициализации. Вы можете использовать команду insserv
(снова как root) или использовать YaST:
insserv boot-notification
Затем вы можете дополнительно проверить, что скрипт является одним из последних, запущенных, просмотрев каждый уровень init. Если вы выбрали только уровень запуска 3, то вы можете сделать это:
ls -l /etc/init.d/rc3.d/S*
Это вернет список ссылок на скрипты инициализации. Ссылка на ваш скрипт должна быть в конце (или около него) списка.
Примечание: Если вы хотите поэкспериментировать с более динамичным способом написания скриптов инициализации, я бы посоветовал прочитать эти две страницы:
решение3
Для OpenSUSE 12.2 (Mantis)сценарийдля "after local" должно быть /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
Я обнаружил, что есть два способа сделать это:
- Прежде всего, откройте терминал и введите:
sudo crontab -e
затем введите
@reboot sudo <command_to_execute_at_startup>
- Во-вторых, вы можете создать файл обслуживания.используя этот метод