centos7开机启动程序

最近在配置服务器,想设置tomcat开机启动(忘了tomcat是怎么装的了)。

以下配置基于centos7,未测试其他版本,请注意。

目标:

1、可以通过执行 “service tomcat start|stop”控制tomcat运行或停止。

2、开机启动tomcat。

解决:

1、service根据"man service"中可以了解到,该指令实际是去/etc/init.d/下查找对应脚本来执行的。

那么,要实现目标1,只需编写/etc/init.d/tomcat脚本,根据不同的参数(start、stop)执行不同的操作即可。脚本代码如下:

#!/bin/sh

if [ $# = 0 ]
then
  command="start"
else
  command="$1"
fi
sta=`ps -ef |grep "tomcat.*start" |wc -l`
case $command in
  "start")
    if [ $sta = 1 ]
    then
      /usr/local/tomcat/bin/startup.sh
    fi
    ;;
  "stop")
    if [ $sta = 2 ]
    then
      /usr/local/tomcat/bin/shutdown.sh
    fi
    ;;
  "status")
    ps -ef |grep tomcat| head -n 1
    ;;
  *)
    echo $"Usage: $0 {start|stop|status}"
    exit 1
esac


2、有两种方法可以解决:

a.在系统启动过程中,会根据运行级别执行/etc/rcx.d/*(其中x为运行级别)。这里的文件实际上软链接到/etc/init.d/下的脚本文件,

那么,怎么创建这些软链接呢?可以使用systemctl或chkconfig指令(它们的关系参考RHEL 7 中 systemctl 的用法(替代service 和 chkconfig))。

systemctl 指令实例:
设置开机启动指令:systemctl enable tomcat
取消设置:systemctl disable tomcat
查看设置:systemctl list-unit-files


chkconfig 指令实例:
使用chkconfig时需要注意,/etc/init.d/下有对应的脚本(这里就是tomcat),且该脚本头部包含如下注释以支持chkconfig,
注释表示在rc2|3|4|5.d下生成优先级96的启动脚本软链接,另外在rc0|6.d下生成优先级04的停止脚本软链接:
#chkconfig: 2345 96 04

设置开机启动指令: chkconfig --add tomcat
取消设置: chkconfig --del tomcat
查看设置: chkconfig



这里,我先用systemctl设置开机启动,但是因为它是从/usr/lib/systemd/system/下的软链接到/etc/systemd/system/multi-user.target.wants,而奇怪的是/usr/lib/systemd/system/tomcat这个文件中的环境配置是错误的。

为了防止其他不必要的麻烦,决定使用chkconfig,用chkconfig设置开机启动后重启机子,发现tomcat未启动。orz。后来尝试把文件名tomcat改成test,执行chkconfig --add test后重启机子,发现tomcat启动了。Orz。再后来执行chkconfig指令时发现这么一段话。

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 
      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
      欲查看对特定 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
恩,看了下systemctl list-unit-files的执行结果,"tomcat.service disabled"。估计chkconfig的设置被systemctl的覆盖了。

所以现在的情况是,用systemctl设置的因为配置错误不能成功启动tomcat,而不用systemctl的设置的话,chkconfig的设置又会被systemctl覆盖。MDZZ。

如果你照着我的配置走到这里,想骂娘?别急,除了把文件名tomcat改掉之外,我们可以剑走偏峰。请看方法b。


b.借用/etc/rc.d/rc.local实现开机启动:

在linux系统启动过程中,在执行完对应运行级别的脚本文件(/etc/rcx.d/*)后,还会执行/etc/rc.local(前提是该文件权限是可执行的)。

所以我直接在/etc/rc.local最后加上

/usr/local/tomcat/bin/startup.sh
同时,为了在系统重启/关闭时停止tomcat,执行下面两条指令:

ln -s /etc/init.d/tomcat /etc/rc0.d/K04tomcat
ln -s /etc/init.d/tomcat /etc/rc6.d/K04tomcat

参考资料:

systemctl 命令完全指南



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值