Pergunta

No momento eu tenho que ir para /usr/java/apache-solr-1.4.0/example e então faça:

java -jar start.jar

Como faço para que isso inicie automaticamente na inicialização?

Estou em um servidor Linux compartilhado.

Foi útil?

Solução

Se você tem acesso raiz à sua máquina, existem várias maneiras de fazer isso com base no fluxo de inicialização do seu sistema (scripts init, Systemd, etc.)

Mas se você não tem raiz, cron tem uma maneira limpa e consistente de executar programas após a reinicialização.

Primeiro, descubra onde o Java está localizado em sua máquina. O comando abaixo lhe dirá onde está:

$ which java

Em seguida, coloque o código a seguir em um script de shell, substituindo o caminho Java abaixo (/usr/bin) pelo caminho que você recebeu do comando acima.

#!/bin/bash

cd /usr/java/apache-solr-1.4.0/example
/usr/bin/java -jar start.jar

Você pode salvar este script em algum local (por exemplo, $ home) como start.sh. Dê a ele permissão de executar o mundo (para simplificar) executando o seguinte comando:

$ chmod og+x start.sh

Agora, teste o script e verifique se ele funciona corretamente a partir da linha de comando.

$ ./start.sh

Se tudo funcionar bem, você precisará adicioná -lo a um dos scripts de inicialização da sua máquina. A maneira mais simples de fazer isso é adicionar a seguinte linha ao final de /etc/rc.local.

# ... snip contents of rc.local ...
# Start Solr upon boot.
/home/somedir/start.sh

Como alternativa, se você não tiver permissão para editar o RC.local, poderá adicioná -lo ao seu usuário Crontab. Primeiro digite o seguinte na linha de comando:

$ crontab -e

Isso trará à tona um editor. Adicione a seguinte linha:

@reboot /home/somedir/start.sh

Se o seu sistema Linux suportar (o que geralmente faz), isso garantirá que seu script seja executado na inicialização.

Se eu não tiver erros de digitação acima, deve funcionar bem para você. Deixe -me saber como foi.

Outras dicas

Como você está em uma caixa de Linux compartilhada, você terá que pedir ao administrador do sistema que faça o seguinte, provavelmente.

Crie um script de inicialização em /etc/init.d/solr.

Copie este código, meu script de inicialização do Solr, nesse arquivo:

#!/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

# 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..."

    # Start daemon
    daemon --chdir='/usr/local/solr/example' --command "java -jar start.jar" --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)
        restart
    ;;
    *)
        echo $"Usage: solr {start|status|stop|restart}"
        exit 3
    ;;
esac

exit $RETVAL

Então corra:

Chkconfig -Solr

Ou (no Ubuntu):

Atualize-rc.d Solr Padrões

... ou, se sua distribuição Linux não tiver chkconfig (ou update-rc.d), link /etc/init.d/solr para /etc/rc3.d/S99solr e /etc/rc5.d/S99solr e /etc/rc3.d/K01solr e /etc/rc5.d/K01solr:

% ln -s /etc/init.d/solr /etc/rc3.d/S99solr

% ln -s /etc/init.d/solr /etc/rc5.d/S99solr

% ln -s /etc/init.d/solr /etc/rc3.d/K01solr

% ln -s /etc/init.d/solr /etc/rc5.d/K01solr

Agora, na reinicialização, o Solr iniciará os níveis 3 e 5 de execução (console com rede e completo GUI).

Para iniciar o Solr correr manualmente:

% /etc/init.d/solr start

Adicionando as seguintes linhas ao meu /etc/init.d/solr O arquivo funciona para apoiar o Red Hat Linux (eu os copiei de /etc/init.d/mysql Depois de ler comentários de outras pessoas aqui).

# Comments to support chkconfig on Red Hat Linux
# chkconfig: 2345 64 36
# Description: A very fast and reliable search engine.

Como um requisito é repetir seções, use uma biblioteca de formulários.Este é o meu critério # 1 ao diferenciar qual mecanismo usar (lista ou biblioteca).InfoPath alças repetindo seções tão facilmente e descobrindo como armazenar e renderizar a seção de repetição em uma lista é mais problemas do que seu valor.

eu respondi essa pergunta já uma vez, mas essa resposta era para sistemas operacionais que usavam SysV e esta é para sistemas operacionais mais recentes que usam cada vez mais sistema.

Como em minha outra resposta, há três coisas que você precisará fazer aqui:

  1. Crie o script e coloque-o no lugar certo.
  2. Faça o script iniciar corretamente na reinicialização.
  3. Bônus:Fazer systemd registros persistentes.

1.Criando o script e colocando-o no lugar certo

Aqui está um systemd arquivo unit que você pode usar (eles substituem os arquivos init do SysV).Diga solr.service.

[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
Environment="XMX=2G"
WorkingDirectory=/usr/local/solr/example
ExecStart=/usr/bin/java -jar -server -Xmx${XMX} start.jar
Restart=on-failure
LimitNOFILE=10000

[Install]
WantedBy=multi-user.target

Observe que há uma configuração para a memória do Solr.Você provavelmente desejará ajustar isso de acordo com seus próprios propósitos.Se você tiver várias variáveis ​​para as quais está passando systemd, você pode fazer isso com o EnvironmentFile directiva.

Mais documentação para esses arquivos está aqui.

2.Faça a inicialização do script corretamente na inicialização

Isso é bastante simples, mas existem regras.Para fazê-lo iniciar na inicialização, coloque o arquivo em /etc/systemd/system/solr.service. Você não pode usar um link simbólico neste diretório, não tente.

Uma vez lá, você pode ativar o daemon para ser executado na inicialização com:

sudo systemctl enable solr

E você pode iniciar, parar e status com:

sudo systemctl {start|stop|status} solr

3.Fazendo systemd registros persistentes

Por padrão, systemd os logs não são persistentes e são perdidos sempre que você reinicializa o sistema.Se não é isso que você deseja, você pode torná-los persistentes criando um diretório:

sudo mkdir -p /var/log/journal/

E então reiniciando o systemd daemon de registro no diário:

sudo systemctl restart systemd-journald

Quando isso estiver concluído, systemddaemon de registro no diário receberá todos os stdout e stderr que o Solr cria e será armazenado em um formato binário sob /var/log/journal/.

O caminho systemd lida com o registro é muito legal e vale a pena estudar se você não estiver familiarizado com ele.Enquanto isso, saiba que para ler suas entradas de log você precisará usar uma nova ferramenta chamada journalctl.Por exemplo, isso seguirá seus logs do Solr:

journalctl -u solr -f

E também existem sinalizadores para fazer filtragem baseada em data e coisas assim.

3.1 Ajustando os arquivos de log

Seção bônus!Se você quiser ajustar os arquivos de log, você pode leia tudo sobre isso na documentação aqui, mas os padrões são na verdade muito seguros e sensatos (os logs são compactados por padrão, não podem crescer muito, têm taxa limitada e são gravados no disco em lotes).

Siga os comentários do Supermagic e siga isso

http://codingrecipes.com/service-x-does-not-support-chkconfig

Ele diz,

1 – Copy your script into /etc/init.d folder
2 – cd /etc/init.d
3 – chmod +x myscript
4 – Add these lines, including #, right after #!/bin/bash or #!/bin/sh:

# chkconfig: 2345 95 20
# description: Some description
# What your script does (not sure if this is necessary though)
# processname: myscript

Então você pode fazer

chkconfig --dd myscript

Script init.d/solr que é testado no CentOS 6/Amazon Linux. Ele envolve a CLI nativa de Solr.

#!/bin/bash
# description: Starts and stops Solr production


PIDFILE=/var/run/solr.pid
SOLR_HOME=/usr/share/solr
START_COMMAND="$SOLR_HOME/bin/solr start -p 8984 -noprompt -m 1g"
NAME="Solr"


start() {
  echo  "Starting $NAME"
  if [ -f $PIDFILE ]; then
    echo -n "$PIDFILE exists. $NAME may be running."
  else
    str=`$START_COMMAND`
    pid=`echo $str | grep -o "pid=[0-9]*" | grep -o "[0-9]*"`
    if [ "$pid" == "" ];
    then
      echo "[FATAL ERROR] Failed to extract pid. Exiting!"
      exit 1
    fi
    echo $pid > $PIDFILE
  fi
  return 0
}


case "$1" in
  start)
    start
  ;;
  stop)
    echo "Stopping $NAME .."
    $SOLR_HOME/bin/solr stop
    rm -f $PIDFILE
  ;;
  status)
    $SOLR_HOME/bin/solr status
  ;;
  restart)
    $0 stop
    #sleep 2
    $0 start
  ;;

  *)
    echo "Usage: $0 (start | stop | restart | status)"
    exit 1
    ;;

esac
exit $?

Verificar

man 5 crontab

Veja se @reboot é suportado no sistema Linux que você está usando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top