可执行Jar文件做成开机自启动系统服务/centos7 systemctl常见用法

第一种简单方式,将命令写入/etc/rc.d/rc.local
  1. 将jar命令写入.sh脚本,比如/data/start-xxx.sh,文件内容如下:
#!/bin/bash
cd /data/apps/
nohup java -jar -server xxx.jar >/dev/null 2>&1 &

解释如下:

nohup:不挂起(no hang up),退出终端(SSH会话)不影响命令在后台继续执行(但是能响应终端输入Ctrl + C发送的SIGINT信号)。
>/dev/null: 将命令的标准输出(stdout,进程中的fd为1)重定向到空设备(丢弃掉)。
2>&1:将标准错误输出(stderr, fd为2)重定向到标准输出,一并丢弃。
最后一个&符号:在后台运行程序,免疫Ctrl+C。若未作重定向,结果会默认输出到终端。
在需要以后台服务运行的情况下,往往将nohup和&搭配一起使用,这样既能免疫Ctrl + C发送SIGINT信号,同时关闭SSH客户端(会发送SIGHUP信号),程序也照样运行而不受影响。

  1. 给文件添加可执行权限:
chmod +x /data/start-xxx.sh
chmod +x /etc/rc.d/rc.local
  1. /etc/rc.d/rc.local文件添加如下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_281
export PATH=$PATH:$JAVA_HOME/bin

sh /data/start-xxx.sh

解释:
系统在启动时会执行一遍/etc/rc.d/rc.local中的命令。因此将shell命令写入/etc/rc.d/rc.local会达到开机启动的目的。
但是在测试中发现sh /data/start-xxx.sh执行时找不到java命令。也就是说/etc/rc.d/rc.local文件在开机执行时,/etc/profile中的环境变量还没有被加载。因此需要先添加java环境变量

第二种方式

系统环境: 阿里云Cent OS 7 64位

1 进入/lib/systemd/system, 可以看到很多以.service结尾的系统服务定义文件.
2 初次接触的话, 可以拷贝其中一个.service文件来进行修改.
$ cp cloud-final.service YOUR-SERVICE-NAME.service
一个示例如下:

[Unit]
Description=Execute your service description
# 注意服务启动顺序, 否则可能启动失败
After=network.target syslog.target cloud-config.service rc-local.service
Requires=cloud-config.target
Wants=network.target

[Service]
Type=simple
# 自定义可执行文件的"绝对路径"
ExecStart=/home/myexec/my_xxx_svr

[Install]
WantedBy=multi-user.target

vim编辑好后, wq保存退出.

3 加载文件改动
$ systemctl daemon-reload

4 systemctl测试一下能否正常启动
$ systemctl start YOUR-SERVICE-NAME.service
如果顺利的话, 服务就已经启动起来了.
$ systemctl is-active YOUR-SERVICE-NAME.service
$ active

5 将自己的服务设置为开机启动
$ systemctl enable YOUR-SERVICE-NAME.service
可以通过如下命令查看是否已经设置为开机启动:
$ systemctl is-enabled YOUR-SERVICE-NAME.service
$ enabled

参考资料:
http://www.cnblogs.com/lenmom/p/9191966.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值