Я не хочу делать правильные вещи, создав новый сценарий systemd, я просто хочу, чтобы мой старый сценарий инициализации снова заработал теперь, когда я обновил свою систему до ОС, использующей systemd.
Я кратко исследовал, как преобразовать сценарии инициализации и как писать сценарии systemd, но я уверен, что изучение и правильное выполнение этого заняло бы у меня несколько часов.
Текущая ситуация:
systemctl start solr
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.
А также:
sudo service solr start
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.
Прямо сейчас я просто хочу вернуться к работе. Каков путь наименьшего сопротивления, чтобы снова заработать?
Обновления
Я не хотел выяснять это все - я действительно не сделал - но я должен, и я нашел свою первую подсказку:
sudo systemctl enable solr
Synchronizing state for solr.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d solr defaults
insserv: warning: script 'K01solr' missing LSB tags and overrides
insserv: warning: script 'solr' missing LSB tags and overrides
Executing /usr/sbin/update-rc.d solr enable
update-rc.d: error: solr Default-Start contains no runlevels, aborting.
Страница несовместимости для systemd сообщает, что:
Информация о зависимостях заголовка LSB имеет значение. Реализации SysV во многих дистрибутивах не использовали информацию о зависимостях, закодированную в заголовках сценария инициализации LSB, или использовали их только очень ограниченным образом. В связи с этим они часто являются неправильными или неполными. Однако systemd полностью интерпретирует эти заголовки и внимательно следит за ними во время выполнения.
Я думаю, это означает, что мой сценарий не будет работать, пока не будет исправлено.
Сценарий в вопросе:
#!/bin/sh
# Prerequisites:
# 1. Solr needs to be installed at /usr/local/solr/example
# 2. daemon needs to be installed
# 3. Script needs to be executed by root
# 4. $INSTALL_ROOT must be set
# This script will launch Solr in a mode that will automatically respawn if it
# crashes. Output will be sent to /var/log/solr/solr.log. A pid file will be
# created in the standard location.
start () {
echo -n "Starting solr..."
# Reset ulimit or else get issues with too many open files (https://issues.apache.org/jira/browse/SOLR-4)
ulimit -n 10000
# start daemon
daemon --chdir='/usr/local/solr/example' --command "java -jar -server start.jar -DINSTALL_ROOT=$INSTALL_ROOT" --respawn --output=/var/log/solr/solr.log --name=solr --verbose
RETVAL=$?
if [ $RETVAL = 0 ]
then
echo "done."
else
echo "failed. See error code for more information."
fi
return $RETVAL
}
stop () {
# stop daemon
echo -n "Stopping solr..."
daemon --stop --name=solr --verbose
RETVAL=$?
if [ $RETVAL = 0 ]
then
echo "done."
else
echo "failed. See error code for more information."
fi
return $RETVAL
}
restart () {
daemon --restart --name=solr --verbose
}
status () {
# report on the status of the daemon
daemon --running --verbose --name=solr
return $?
}
case "$1" in
start)
start
;;
status)
status
;;
stop)
stop
;;
restart)
stop
sleep 15
start
;;
*)
echo $"Usage: solr {start|status|stop|restart}"
exit 3
;;
esac
exit $RETVAL
Ответы:
Серьезно, системный файл модуля легко написать для такой службы, как эта ... или для большинства служб.
Это должно дать вам около 95% пути туда. Поместите это, например, в
/etc/systemd/system/solr.service
Обратите внимание на вещи, которых здесь нет, такие как файл журнала и тому подобное; systemd автоматически захватывает и регистрирует выходные данные службы под именем службы.
источник
systemd
имеет некоторые странности, например, этот скрипт не будет иметь постоянных журналов, если вы не включите его. В конце концов, это работает, и ваш толчок был тем, что мне было нужно, спасибо.Для меня было проще просто добавить информационный блок init в заголовок, как предложено здесь :
Затем выполните
sudo systemctl enable solr
.источник
"contains no runlevels, aborting"
ошибку), пока я не осознал это: пропущенный третий # во второй строке (так и должно быть### BEGIN INIT INFO
). Бьюсь об заклад, это также объясняет, почему у вас так мало голосов.Другое решение использовать устаревший скрипт инициализации solr с systemd:
источник
Удобнее запустить Solr, используя предоставленный стартовый скрипт .
Файл системного модуля выглядит следующим образом:
Обратите внимание, что вы также можете использовать переменные среды, добавив
EnvironmentFile
в[Service]
раздел. Скриптbin/solr
учитывает переменные окружения, просто посмотрите на него.источник
Протестировано в Debian: добавьте '_SYSTEMCTL_SKIP_REDIRECT = OHYES' в начале скрипта.
Системным фанатам это может не понравиться, но эй, я не люблю systemd, так что там :).
источник
SYSTEMCTL_SKIP_REDIRECT=true
в redhat_
(подчеркивание) , прежде чемSYSTEMCTL
, как это:_SYSTEMCTL_SKIP_REDIRECT=1
. Если вы попробуете это из командной строки, вам также необходимо экспортировать эту переменную.У меня была та же ошибка при попытке использовать скрипт инициализации LSB в CentOS 7. Основной причиной оказалось то, что скрипт был символической ссылкой. После замены на копию оригинала все работало нормально.
источник