Вопрос или проблема
Пытаюсь зарегистрировать сервис в /etc/init.d
, но не могу запустить его с помощью service myservice start
и при загрузке
Исполняемый файл:
#!/bin/sh
# kFreeBSD не принимает скрипты как интерпретаторы, используйте #!/bin/sh и sourcing.
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Пример initscript
# Description: Этот файл должен быть использован для создания скриптов, которые
# помещаются в /etc/init.d. Этот пример запускает
# один форк-демон, способный записывать pid
# файл. Чтобы получить другие поведения, реализуйте
# do_start(), do_stop() или другие функции для
# переопределения значений по умолчанию в /lib/init/init-d-script.
### END INIT INFO
# Автор: Foo Bar <[email protected]>
#
# Пожалуйста, удалите строки "Автор" выше и замените их
# на свое имя, если вы копируете и модифицируете этот скрипт.
DESC="запись белого радио"
DAEMON=/usr/bin/streamripper
case "$1" in
start) log_daemon_msg "Запуск записи белого радио" "streamripper"
sudo -u ubuntu /usr/bin/streamripper http://184.154.58.146:29378/ch18_56.mp3 --quiet -s -a -d ~ &
;;
stop) log_daemon_msg "Остановка записи белого радио" "streamripper"
pkill streamripper
RETVAL=0
log_end_msg $RETVAL
;;
restart) log_daemon_msg "Перезапуск записи белого радио" "streamripper"
$0 stop
$0 start
;;
*)
esac
exit 0
Пытаюсь зарегистрировать это с помощью
sudo update-rc.d recordbyradio defaults
и команда возвращает результат без каких-либо сообщений, независимо от того, сколько раз я ее выполняю
потом
sudo service recordbyradio start
также возвращает результат без сообщений и ничего не запускает.
/etc/init.d/recordbyradio start
тем не менее работает отлично
Версия Ubuntu (работает в EC2):
Нет доступных модулей LSB.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
Не вижу в вашем посте: update-rc.d recordbyradio enable
Возможно, сервис не включен, и поэтому он не работает.
Команда update-rc.d
должна создать символические ссылки для вас:
- /etc/rc0.d/K00recordbyradio
- /etc/rc1.d/K00recordbyradio
- /etc/rc2.d/S99recordbyradio
- /etc/rc3.d/S99recordbyradio
- /etc/rc4.d/S99recordbyradio
- /etc/rc5.d/S99recordbyradio
- /etc/rc6.d/K00recordbyradio
все эти ссылки должны указывать на ваш скрипт.
Ваш скрипт также должен быть исполняемым, поэтому chmod +x /etc/init.d/recordbyradio
.
Ответ или решение
Регистрация службы в init.d на Ubuntu
Регистрация службы в /etc/init.d
для ее последующего управления с помощью команд, таких как service
, может быть не столь интуитивной, особенно если вы сталкиваетесь с неудачами при запуске. Ниже представлены шаги и рекомендации для успешной регистрации и запуска вашего скрипта службы recordbyradio
на Ubuntu 16.04.4 LTS.
Шаг 1: Проверка скрипта службы
Прежде всего, убедитесь, что ваш скрипт службы корректен. Рассмотрим ваш текущий исполняемый файл:
#!/bin/sh
# Explanation for kFreeBSD
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides: recordbyradio
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Запись с радиопотока
# Description: Эта служба запускает streamripper для записи радиопотока
### END INIT INFO
# Дальнейшие параметры
DESC="bel radio recording"
DAEMON=/usr/bin/streamripper
case "$1" in
start)
log_daemon_msg "Starting bel radio recording" "streamripper"
sudo -u ubuntu /usr/bin/streamripper http://184.154.58.146:29378/ch18_56.mp3 --quiet -s -a -d ~ &
RETVAL=$?
log_end_msg $RETVAL
;;
stop)
log_daemon_msg "Stopping bel radio recording" "streamripper"
pkill streamripper
RETVAL=$?
log_end_msg $RETVAL
;;
restart)
log_daemon_msg "Restarting bel radio recording" "streamripper"
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
Шаг 2: Убедитесь в исполнимости скрипта
Для того чтобы система могла запускать этот скрипт, он должен быть исполнимым. Выполните команду:
sudo chmod +x /etc/init.d/recordbyradio
Шаг 3: Регистрация скрипта службы
Вам нужно зарегистрировать вашу службу с помощью update-rc.d
. Это создаст необходимые символические ссылки в соответствующих директориях:
sudo update-rc.d recordbyradio defaults
Однако, как было отмечено, если команда update-rc.d
не возвращает никаких сообщений, это может означать, что служба не была зарегистрирована корректно. Вы можете использовать следующую команду, чтобы активировать службу:
sudo update-rc.d recordbyradio enable
Шаг 4: Проверка символических ссылок
После выполнения предыдущей команды убедитесь, что для вашей службы созданы необходимые символические ссылки. Введите:
ls /etc/rc*.d | grep recordbyradio
Это должно вернуть несколько строк с путями к ссылкам, например:
/etc/rc0.d/K00recordbyradio
/etc/rc1.d/K00recordbyradio
/etc/rc2.d/S99recordbyradio
, и так далее.
Шаг 5: Тестирование службы
Теперь, когда служба зарегистрирована, вы должны быть в состоянии запустить ее с помощью:
sudo service recordbyradio start
Шаг 6: Проверка сервиса
Если служба не запускается, но работает через `/etc/init.d“:
/etc/init.d/recordbyradio start
это может указывать на проблемы с конфигурацией. Вам следует проверить системные логи:
sudo journalctl -xe
Заключение
Следование вышеуказанным шагам должно помочь вам успешно зарегистрировать и запустить вашу службу в init.d на Ubuntu. Убедитесь, что ваш скрипт службы прописан корректно и имеет все необходимые функциональные возможности для управления процессами, такими как запуск и остановка. При возникновении дополнительных вопросов рекомендуем обращаться к документации Ubuntu или сообществам разработчиков.