此刻我必须去 /usr/java/apache-solr-1.4.0/example 然后执行以下操作:

java -jar start.jar

如何让它在启动时自动启动?

我在共享 Linux 服务器上。

有帮助吗?

解决方案

如果你有你的机器的root访问权限,有许多方法可以做到这一点根据你的系统的初始化流程(init脚本,systemd,等等。)

但是,如果你没有根,cron有一个干净的,一致的方式在重新启动执行程序。

首先,找出其中的Java位于您的计算机上。下面的命令将告诉你它在哪里:

$ which java

然后,粘以下代码到一个外壳脚本,与从上述命令得到的路径替换下方(在/ usr / bin)中java的路径。

#!/bin/bash

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

可以在某些位置(例如,$ HOME)作为start.sh保存此脚本。给它世界执行权限(为了简化)通过运行下面的命令:

$ chmod og+x start.sh

现在,测试脚本,并确保其在命令行正常工作。

$ ./start.sh

如果一切运作良好,你需要将它添加到你的机器的启动脚本之一。要做到这一点的最简单的方式是以下的行添加到的/etc/rc.local 的端部。

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

另外,如果你没有权限来编辑rc.local中,那么你就可以将其添加到您的用户的crontab为如此。首先在命令行键入以下内容:

$ crontab -e

此将调出的编辑器。下面的行添加到它:

@reboot /home/somedir/start.sh

如果你的Linux系统支持,(它通常不会),这将确保您的脚本在启动时运行。

如果我没有以上的任何错别字,它应该工作进行的顺利吗。让我知道如何去。

其他提示

由于您使用的是共享的Linux机器,你要问的系统管理员做到以下几点,或许。

/etc/init.d/solr创建一个启动脚本。

这段代码,我Solr的启动脚本复制到该文件:

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

然后运行:

  

的chkconfig --add solr的

或者(在Ubuntu):

  

更新的rc.d solr的默认值

...或者,如果你的Linux发行版没有chkconfig(或update-rc.d),链接/etc/init.d/solr/etc/rc3.d/S99solr/etc/rc5.d/S99solr/etc/rc3.d/K01solr/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

现在在重新启动时的Solr将运行级别启动3和5(与网络&完整的 GUI )。

要启动的solr手动运行:

% /etc/init.d/solr start

添加下面的几行我/etc/init.d/solr文件工作,支持Red Hat Linux的(我复制他们/etc/init.d/mysql被他人阅读这里的评论后)。

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

您需要在此处执行三个步骤:

  1. 创建脚本,使其可执行,并将其放在正确的位置。
  2. 使脚本在重新启动时正确启动。
  3. 奖金:设置 logrotation 脚本,以便日志不会失控。

第一,我从上面调整了 supermagic 的脚本。没问题,但有一些拼写错误,缺少一些功能(状态、重新启动),没有非常有效地使用守护程序实用程序。

这是我的脚本版本(确保你有 守护进程 安装后才能正常工作):

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

将此脚本放在 /etc/init.d/solr 中,使其可执行,然后您应该可以顺利完成第一步。您现在可以使用 /etc/init.d/solr start|stop|restart|status 启动/停止/重新启动/状态 solr 守护进程

对于第二步,在 Ubuntu 机器上运行以下命令(不知道 Redhat):

update-rc.d solr defaults

完成此操作后,您的状态就非常好,但您可能希望在某个时刻正确轮换日志,因此这里有一个很好的日志配置:

/var/log/solr/*.log {
  weekly
  rotate 12
  compress
  delaycompress
  create 640 root root
  postrotate
    /etc/init.d/solr restart
  endscript
}

将该文件放在 /etc/logrotate.d/solr 中,假设 logrotate 正在运行(通常是这样),您应该可以开始了。

我回答了这个问题 已经一次, ,但这个答案适用于使用 SysV 的操作系统,而这个答案适用于越来越多地使用 SysV 的较新操作系统 系统.

如在 我的另一个答案, ,您需要在这里做三件事:

  1. 创建脚本并将其放在正确的位置。
  2. 使脚本在重新启动时正确启动。
  3. 奖金:制作 systemd 日志持久化。

1.创建脚本并将其放在正确的位置

这是一个 systemd 您可以使用的单元文件(这些文件替换 SysV 初始化文件)。命名它 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

请注意,其中有 Solr 内存的配置。您可能需要根据自己的目的进行调整。如果您要传递多个变量 systemd, ,你可以用 EnvironmentFile 指示。

这些文件的更多文档位于此处.

2.使脚本在开机时正确启动

这相当简单,但有规则。要使其在启动时启动,请将文件放入 /etc/systemd/system/solr.service. 您不能在此目录中使用符号链接,请勿尝试.

一旦进入,您可以使用以下命令启用守护进程在启动时运行:

sudo systemctl enable solr

您可以使用以下命令启动、停止、状态它:

sudo systemctl {start|stop|status} solr

3.制作 systemd 日志持久化

默认情况下, systemd 日志不是持久性的,只要您重新启动系统,它们就会丢失。如果这不是您想要的,您可以通过创建目录使它们持久化:

sudo mkdir -p /var/log/journal/

然后重新启动 systemd 日志守护进程:

sudo systemctl restart systemd-journald

一旦完成, systemd的日志守护进程 将接收 Solr 创建的所有 stdout 和 stderr 并将其存储在 二进制格式 在下面 /var/log/journal/.

道路 systemd 处理日志记录非常简洁,如果您不熟悉的话值得学习。与此同时,只需知道要读取日志条目,您需要使用一个名为的新工具 journalctl. 。例如,这将跟踪您的 solr 日志:

journalctl -u solr -f

还有一些用于进行基于日期的过滤和类似操作的标志。

3.1 调整日志文件

奖金部分!如果你想调整日志文件,你可以 在此处的文档中阅读有关它的所有内容, ,但默认值实际上非常安全和合理(默认情况下日志被压缩,不能增长太大,速率受到限制,并且批量写入磁盘)。

请supermagic的意见,然后按照这个

http://codingrecipes.com/service-x-does-not - 支持-chkconfig的

他说,

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

然后可以执行

的chkconfig --add的MyScript

的init.d该对的Centos 6 / Linux的亚马逊测试/ solr的脚本。它包装Solr的本地CLI。

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

检查

man 5 crontab

查看是否支持Linux系统@reboot所使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top