AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 690155
Accepted
mlissner
mlissner
Asked: 2015-05-07 14:57:35 +0800 CST2015-05-07 14:57:35 +0800 CST 2015-05-07 14:57:35 +0800 CST

Qual é a maneira mais fácil de fazer meu antigo script de inicialização funcionar no systemd?

  • 772

Não quero fazer a coisa certa criando um novo script systemd, só quero que meu antigo script init funcione novamente agora que atualizei meu sistema para um sistema operacional que está usando o systemd.

Pesquisei brevemente como converter scripts init e como escrever scripts systemd, mas tenho certeza de que aprender corretamente e fazer direito levaria várias horas.

A situação atual é:

systemctl start solr
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.

E:

sudo service solr start
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.

No momento, só quero voltar ao trabalho. Qual é o caminho de menor resistência para fazer isso funcionar novamente?

Atualizações

Eu não queria descobrir tudo isso - realmente não queria - mas preciso e descobri minha primeira pista:

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.

A página de incompatibilidades do systemd diz que:

As informações de dependência do cabeçalho LSB são importantes. As implementações de SysV em muitas distribuições não usavam as informações de dependência codificadas nos cabeçalhos de script de inicialização LSB ou as usavam apenas de maneiras muito limitadas. Por isso, muitas vezes estão incorretos ou incompletos. systemd, no entanto, interpreta totalmente esses cabeçalhos e os segue de perto no tempo de execução

Acho que isso significa que meu script não funcionará até que seja corrigido.

O roteiro em questão:

#!/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
systemd init.d
  • 7 7 respostas
  • 125400 Views

7 respostas

  • Voted
  1. Best Answer
    Michael Hampton
    2015-05-07T17:42:55+08:002015-05-07T17:42:55+08:00

    Sério, um arquivo de unidade systemd é trivial de escrever para um serviço como este ... ou para a maioria dos serviços.

    Isso deve levá-lo a cerca de 95% do caminho até lá. Coloque isso, por exemplo,/etc/systemd/system/solr.service

    [Unit]
    Description=Apache Solr
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=simple
    EnvironmentFile=/etc/courtlistener
    WorkingDirectory=/usr/local/solr/example
    ExecStart=/usr/bin/java -jar -server -Xmx${CL_SOLR_XMX} start.jar -DINSTALL_ROOT=${INSTALL_ROOT}
    Restart=on-failure
    LimitNOFILE=10000
    
    [Install]
    WantedBy=multi-user.target
    

    Observe as coisas que não estão aqui, como o arquivo de log e tal; O systemd irá capturar e registrar automaticamente a saída do serviço sob o nome do serviço.

    • 35
  2. eadmaster
    2017-03-18T22:57:08+08:002017-03-18T22:57:08+08:00

    Para mim, foi mais fácil apenas adicionar o bloco de informações init no cabeçalho, conforme sugerido aqui :

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          solr
    # Required-Start:    
    # Required-Stop:     
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: solr
    # Description:       solr
    ### END INIT INFO
    

    Em seguida, execute sudo systemctl enable solr.

    • 28
  3. grégory eve
    2015-08-14T00:56:50+08:002015-08-14T00:56:50+08:00

    Outra solução para usar o script init legado solr com systemd:

    systemctl daemon-reload  
    systemctl enable solr  
    systemctl start solr  
    
    • 12
  4. Jiří Kozlovský
    2017-09-01T23:41:43+08:002017-09-01T23:41:43+08:00

    É mais conveniente executar o Solr usando o script de início fornecido .

    O arquivo de unidade do systemd se parece com isso:

    [Unit]
    Description=Apache Solr for Nextcloud's nextant app fulltext indexing
    After=syslog.target network.target remote-fs.target nss-lookup.target systemd-journald-dev-log.socket
    Before=nginx.service
    
    [Service]
    Type=forking
    User=solr
    WorkingDirectory=/path/to/solr/server
    ExecStart=/path/to/solr/bin/solr start
    ExecStop=/path/to/solr/bin/solr stop
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    Observe que você também pode usar suas variáveis ​​de ambiente adicionando EnvironmentFileà [Service]seção. O script bin/solrrespeita variáveis ​​de ambiente, basta dar uma olhada nele.

    • 8
  5. Guy Egozy
    2016-09-16T02:37:44+08:002016-09-16T02:37:44+08:00

    Testado no Debian: Adicione '_SYSTEMCTL_SKIP_REDIRECT=OHYES' no início do script.

    Os fanboys do systemd podem não gostar, mas ei, eu não gosto do systemd, então aí :).

    • 1
  6. gatopeich
    2016-11-15T23:52:49+08:002016-11-15T23:52:49+08:00

    Eu tive o mesmo erro ao tentar usar um script de inicialização LSB no CentOS 7. A causa raiz acabou sendo que o script era um link simbólico. Depois de substituído por uma cópia do original, tudo funcionou bem.

    • 1
  7. Oly Dungey
    2021-05-11T08:20:36+08:002021-05-11T08:20:36+08:00

    A resposta mais simples para a pergunta do OP é:

    chkconfig {{service-name}} on- isso habilitará o serviço SysV existente sem mais nada para fazer. Eu acho que não é inteiramente a questão original se ele está rodando em uma espécie de modo legado, mas está me permitindo rodar serviços antigos do CentOS 6 na versão 7 sem nenhum trabalho extra.

    Depois de executar esse comando, você pode controlar o serviço por meio de systemctlcomandos padrão, pois ele cria a unidade wrapper-thingmyjigwhatsit.

    • 1

relate perguntas

  • Como definir a variável de ambiente no serviço systemd?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve