在启动时以管理权限启动tomcat


23

登录到系统之前,我需要运行一个进程。如何像服务一样运行它?如何在Linux中进行服务?

在Ubuntu和Fedora中?服务是定制tomcat


6
服务的启动方式在Linux发行版中非常重要。请告诉我们您要完成的工作(以及有关发行版和台式机环境的信息),因为现在我认为您可能没有在考虑问题。
xenoterracide

Answers:


23

要在没有登录系统登录系统之前(即“启动时”)运行服务,您将需要创建启动脚本并将其添加到启动顺序中。
服务脚本分为三个部分:启动,停止和重新启动。
服务脚本的基本结构为:

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

根据您的喜好调整脚本之后,只需将其放在/etc/init.d/中,
然后将其添加到系统服务启动过程中(在Fedora上,我不是Ubuntu用户,> D):

chkconfig -add <ServiceName>  

服务将添加到系统启动过程中,而您无需手动再次启动它。

干杯!


2
请注意,对于简单的初始化脚本而言,启动,停止和重新启动通常就足够了。您可能还希望包含一个“状态”操作,这在Debian和其他发行版中很容易,这些发行版的init-functions包中包含status_of_proc()。管理完善的软件包将包含LSB所需的所有功能(refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/…)。在Ubuntu中与tomcat一起分发的init脚本包含所有这些操作,可以肯定只使用它。
史蒂文D

19

根据初始化系统的不同,您创建初始化脚本的方式也不同。Fedora为您提供了新贵和systemd供您选择,当然还有SysV兼容性。

暴发户

  • 创建服务定义文件为 /etc/init/custom-tomcat.conf
  • 放进去:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

并且您的Tomcat应该在系统启动时启动。

系统化

  • 在以下位置创建服务定义 /etc/systemd/system/custom-tomcat.service
  • 放进去:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

并使用启用服务systemctl enable custom-tomcat.service。它将在每次正常引导时启动。

当然,两个初始化系统都没有更多的配置选项,您可以在它们的文档中查看。


7

Tomcat是一项相当普通的服务,我建议您先查看发行版提供的init脚本。它有可能与您自定义的二进制文件一起使用,几乎不需要调整。


6

如果有cron守护程序,则预定义的cron时间挂钩之一是@reboot,它在系统启动时自然运行。运行crontab -e以编辑您的crontab文件,并添加一行:

@reboot /your/command/here

这适用于所有启动公司,还是仅重新启动?
WhyNotHugo 2010年

它仅适用于fcron-不适用于vixie-cron或任何其他cron AFAIK。
Maciej Piechotka 2010年

@Maciej它绝对适用于vixie-cron;这就是我使用的
Michael Mrozek

@Hugo所有创业公司
Michael Mrozek

6

为了在计算机启动后但在用户登录之前简单地运行脚本,您只需编辑脚本/etc/rc.local即可解决该任务。


3

您可以制作一个更复杂的脚本,该脚本允许您在特定用户的权限下运行,如下所示:

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

该脚本位于/etc/init.d/myservice中,您可以通过执行以下命令启动服务:

/etc/init.d/myservice start

阅读start-stop-daemon的手册页以了解其工作原理。


1

在Ubuntu或Debian中,您可以使用添加

update-rc.d your_service defaults

去除

update-rc.d -f your_service remove

再见!\ o

很好地实现了功能状态并强制重载为LSB编译器


如何使我的守护程序出现在service --status-all列表中?
Necktwi 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.